2

这是我琐碎的 Pax 考试测试:

package ru.focusmedia.odp.server.datastore.itests;

import static org.ops4j.pax.exam.CoreOptions.felix;
import static org.ops4j.pax.exam.CoreOptions.options;

import javax.inject.Inject;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.Configuration;
import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;

/**
 * @author Toni Menzel (tonit)
 * @since Mar 3, 2009
 */
@RunWith(JUnit4TestRunner.class)
public class SampleTest {

    @Inject
    BundleContext bundleContext = null;

    /**
     * You will get a list of bundles installed by default plus your testcase,
     * wrapped into a bundle called pax-exam-probe
     */
    @Test
    public void listBundles() {
        for (Bundle b : bundleContext.getBundles()) {
            System.out.println("Bundle " + b.getBundleId() + " : "
                    + b.getSymbolicName());
        }
    }

    @Configuration
    public Option[] config() {
        return options(felix());
    }
}

及其POM文件:

<?xml version='1.0' encoding='UTF-8' ?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.focusmedia.odp.server</groupId>
    <artifactId>datastore.itests</artifactId>
    <version>0.1.0</version>
    <!-- <packaging>bundle</packaging> -->

    <name>Pax Exam based Testproject</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.servicemix.tooling</groupId>
                <artifactId>depends-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>generate-depends-file</id>
                        <goals>
                            <goal>generate-depends-file</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings 
                    only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.servicemix.tooling
                                        </groupId>
                                        <artifactId>
                                            depends-maven-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.2,)
                                        </versionRange>
                                        <goals>
                                            <goal>
                                                generate-depends-file
                                            </goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                        <!-- <ignore/> -->
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencies>

        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.3.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit4</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-native</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.karaf</groupId>
            <artifactId>karaf</artifactId>
            <version>2.2.6</version>
            <type>pom</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.karaf</groupId>
            <artifactId>org.apache.karaf.main</artifactId>
            <version>2.2.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.framework</artifactId>
            <version>4.0.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-link-mvn</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.url</groupId>
            <artifactId>pax-url-aether</artifactId>
            <version>1.3.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.karaf.tooling</groupId>
            <artifactId>org.apache.karaf.tooling.testing</artifactId>
            <version>2.2.6</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

我希望测试运行一次,但这是实际结果:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Pax Exam based Testproject 0.1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- depends-maven-plugin:1.2:generate-depends-file (generate-depends-file) @ datastore.itests ---
[INFO] Created: /home/aromanov/workspaces/odp-server/ru.focusmedia.odp.server.datastore.itests/target/classes/META-INF/maven/dependencies.properties
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ datastore.itests ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/aromanov/workspaces/odp-server/ru.focusmedia.odp.server.datastore.itests/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ datastore.itests ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ datastore.itests ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ datastore.itests ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ datastore.itests ---
[INFO] Surefire report directory: /home/aromanov/workspaces/odp-server/ru.focusmedia.odp.server.datastore.itests/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ru.focusmedia.odp.server.datastore.itests.SampleTest
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/aromanov/.m2/repository/ch/qos/logback/logback-classic/1.0.1/logback-classic-1.0.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/aromanov/.m2/repository/org/apache/karaf/org.apache.karaf.client/2.2.6/org.apache.karaf.client-2.2.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/aromanov/.m2/repository/org/slf4j/slf4j-simple/1.6.4/slf4j-simple-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/aromanov/.m2/repository/org/ops4j/pax/logging/pax-logging-api/1.6.5/pax-logging-api-1.6.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
[   o.o.p.e.s.DefaultExamSystem] - Pax Exam System (Version: 2.3.1) created.
[org.ops4j.pax.exam.rbc.internal.Activator] : Name, port or host is null. So this RBC remains inactive.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling SLF4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Jakarta Commons Logging API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Log4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Avalon Logger API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling JULI Logger API support.
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Test PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d to be in PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d,
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Registering Service: org.ops4j.pax.exam.ProbeInvoker with Probe-Signature="PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d" and expression="ru.focusmedia.odp.server.datastore.itests.SampleTest;listBundles"
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Test PaxExam-Executable to be in PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d,
[org.ops4j.pax.exam.rbc.internal.Activator] : Name, port or host is null. So this RBC remains inactive.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling SLF4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Jakarta Commons Logging API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Log4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling Avalon Logger API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Enabling JULI Logger API support.
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Test PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d to be in PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d,
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Registering Service: org.ops4j.pax.exam.ProbeInvoker with Probe-Signature="PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d" and expression="ru.focusmedia.odp.server.datastore.itests.SampleTest;listBundles"
org.ops4j.pax.exam.extender.service[org.ops4j.pax.exam.raw.extender.intern.Probe] : Test PaxExam-Executable to be in PaxExam-1f348e55-521a-48f1-b5a2-3e1c3276012d,
Bundle 0 : org.eclipse.osgi
Bundle 1 : org.ops4j.pax.exam.rbc
Bundle 2 : org.ops4j.pax.exam.inject
Bundle 3 : org.ops4j.pax.exam.extender.service
Bundle 4 : osgi.cmpn
Bundle 5 : org.ops4j.pax.logging.pax-logging-api
Bundle 6 : org.apache.geronimo.specs.geronimo-atinject_1.0_spec
Bundle 7 : PAXEXAM-PROBE-5c53a55c-5180-4471-923d-41806df0eb26
Bundle 0 : org.apache.felix.framework
Bundle 1 : org.ops4j.pax.exam.rbc
Bundle 2 : org.ops4j.pax.exam.inject
Bundle 3 : org.ops4j.pax.exam.extender.service
Bundle 4 : osgi.cmpn
Bundle 5 : org.ops4j.pax.logging.pax-logging-api
Bundle 6 : org.apache.geronimo.specs.geronimo-atinject_1.0_spec
Bundle 7 : PAXEXAM-PROBE-5c53a55c-5180-4471-923d-41806df0eb26
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling SLF4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Jakarta Commons Logging API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Log4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Avalon Logger API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling JULI Logger API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling SLF4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Jakarta Commons Logging API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Log4J API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling Avalon Logger API support.
org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.logging.internal.Activator] : Disabling JULI Logger API support.
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.964 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.130s
[INFO] Finished at: Wed Apr 18 13:50:30 MSK 2012
[INFO] Final Memory: 12M/214M
[INFO] ------------------------------------------------------------------------

为什么org.eclipse.osgi还要进行测试?

4

2 回答 2

3

检查 Equinox 捆绑包的瞬态依赖性以获取测试范围并明确排除它。

选项(菲利克斯());- 仅适用于 PaxRunner 容器。本机容器忽略它。

本机容器使用类路径中的 OSGi 框架。

Pax-考试选项

于 2012-04-18T11:21:55.250 回答
1

我遇到了同样的问题,我的一位同事让我从返回 Option[] 的方法中删除了 @Configuration 注释,从而解决了这个问题。

于 2015-05-21T22:09:14.620 回答