【问题标题】:PAX Exam - @Before method not calledPAX 考试 - 未调用 @Before 方法
【发布时间】:2014-03-02 16:32:21
【问题描述】:

我正在尝试使用 PAX Exam 设置测试,如下所示:

@ExamReactorStrategy(PerMethod.class)
public class AbstractTest {

    @Configuration
    public Option[] config() {
        return options(
                junitBundles(),

                /* PAX Logging */
                mavenBundle("org.ops4j.pax.logging", "pax-logging-api", "1.7.2"),
                mavenBundle("org.ops4j.pax.logging", "pax-logging-service", "1.7.2"),

                /* Apache Felix Config Admin */
                mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.0"),

                /* Eclipse Gemini dependencies */
                mavenBundle().groupId("org.aopalliance").artifactId("com.springsource.org.aopalliance").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.aop").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.beans").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.context").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.core").versionAsInProject(),

                /* Eclipse Gemini */
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-core", GEMINI_VERSION),
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-extender", GEMINI_VERSION),
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-io", GEMINI_VERSION),

                /* Other bundles */;
    }

    @Before
    public void setUp() throws Exception {
        ....
    }

}


@RunWith(PaxExam.class)
public class MyTest extends AbstractTest {

    @Inject
    private MyObject myObject;

    @Test
    public void testOne() {
        ...
    }

}

由于某种原因,@Before 注解的方法没有被调用。

谢谢,米凯尔


编辑:我使用的 PAX EXAM 依赖项是:

<dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam-container-native</artifactId>
    <version>${pax.exam.version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam-junit4</artifactId>
    <version>${pax.exam.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam-link-mvn</artifactId>
    <version>${pax.exam.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.ops4j.pax.url</groupId>
    <artifactId>pax-url-aether</artifactId>
    <version>${url.version}</version>
    <scope>test</scope>
</dependency>

我使用 PAX EXAM 3.4.0 版。

【问题讨论】:

    标签: java junit4 pax-exam


    【解决方案1】:

    我已经建立了一个测试项目,它运行良好。

    我终于找到了导致问题的原因。似乎在配置期间停止了测试的执行。

    我使用 Eclipse Gemini 2.0.M02,并在我的应用程序上下文中使用占位符。例如,我需要将数据源 URL 设置为属性。我想使用 @Before 方法来使用配置管理服务为 PID 设置配置。

    由于在配置期间加载了应用程序上下文,并且此时未配置 PID(因为尚未调用 @Before 方法),我从 Spring 收到一个错误,导致 PAX EXAM 中止当前的执行测试。

    因此,在我的情况下,我无法通过 @Before 方法使用配置管理服务。

    解决方案是使用 pax-exam-cm 模块,该模块允许在配置方法中与配置管理服务交互,如下所示:

    @Configuration
    public static Option[] config() {
        return options(
                junitBundles(),
    
                /* PAX Logging */
                mavenBundle("org.ops4j.pax.logging", "pax-logging-api", "1.7.2"),
                mavenBundle("org.ops4j.pax.logging", "pax-logging-service", "1.7.2"),
    
                /* Apache Felix Config Admin */
                mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.0"),
    
                ConfigurationAdminOptions.newConfiguration("my.pid")
                    .put("prop1", "value1")
                    .put("prop2", "value2")
                    .asOption(),
    
                /* Eclipse Gemini + dependencies */
                mavenBundle().groupId("org.aopalliance").artifactId("com.springsource.org.aopalliance").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.aop").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.beans").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.context").versionAsInProject(),
                mavenBundle().groupId("org.springframework").artifactId("org.springframework.core").versionAsInProject(),
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-core", GEMINI_VERSION),
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-extender", GEMINI_VERSION),
                mavenBundle("org.eclipse.gemini.blueprint", "gemini-blueprint-io", GEMINI_VERSION),
    
                /* Other bundles */
                );
    }
    

    您还需要将 pax-exam-cm 依赖项添加到您的 POM(如果您使用 Maven):

    <dependency>
        <groupId>org.ops4j.pax.exam</groupId>
        <artifactId>pax-exam-cm</artifactId>
        <version>3.4.0</version>
        <scope>test</scope>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2013-03-03
      • 2017-08-17
      • 2016-05-19
      • 1970-01-01
      相关资源
      最近更新 更多