加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – @Before在TestRule中的方法不被调用

发布时间:2020-12-14 16:43:35 所属栏目:Java 来源:网络整理
导读:我实现了一个JUnit 4 TestRule(扩展了一个ExternalResource),并将它作为一个@ClassRule注入到我的测试类中:我想在这个类的每个测试中为所有测试一次初始化一个资源,并最终将其删除. 我的问题是我的@Before和@After规则方法在我的@Test方法之前/之后都没有被
我实现了一个JUnit 4 TestRule(扩展了一个ExternalResource),并将它作为一个@ClassRule注入到我的测试类中:我想在这个类的每个测试中为所有测试一次初始化一个资源,并最终将其删除.

我的问题是我的@Before和@After规则方法在我的@Test方法之前/之后都没有被调用:任何想法为什么会发生这种情况?

最小可编译示例:

package com.acme.test;

import static org.junit.Assert.assertNull;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.ExternalResource;

class Coffee {
    public void throwAway() {}
}

class CoffeeMachine extends ExternalResource {
    Coffee whatElse;    
    @Override protected void before() throws Throwable {
        whatElse = new Coffee();
    }

    @Override protected void after() {
        whatElse.throwAway();
    }

    public Coffee gimmieCoffee() { return whatElse; }
}

public class CoffeeTester {
    @ClassRule public static CoffeeMachine CM = new CoffeeMachine();

    @Test public void drinkACoffee() {
        Coffee c = CM.gimmieCoffee();
        assertNull(c);  // ---> Coffee is null!!                       (fuuuuuuuuuu...)
    }
}

有什么我在这里误会吗?请注意,非静态@Rule也会发生这种情况.

我正在使用JUnit 4.11.

非常感谢您的任何提示.

解决方法

我认为这是你的测试跑步者的一个问题.也许一些插件已经安装了一个自定义的跑步者,当您从Ecilpse运行测试时使用它?

检查测试的运行配置,并确保使用标准JUnit 4测试运行程序:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读