为了账号安全,请及时绑定邮箱和手机立即绑定

有条件地忽略JUnit 4中的测试

/ 猿问

有条件地忽略JUnit 4中的测试

互换的青春 2019-07-22 16:36:04

有条件地忽略JUnit 4中的测试

好吧,那么@Ignore注释有助于标记不应该运行测试用例。

但是,有时我想忽略基于运行时信息的测试。例如,如果我有一个并发测试,需要在具有一定数量核心的机器上运行。如果这个测试是在单处理器机器上运行的,我不认为只通过测试是不正确的(因为它还没有运行),并且肯定不应该失败测试并破坏构建。

因此,我希望能够在运行时忽略测试,因为这似乎是正确的结果(因为测试框架将允许构建通过,但记录测试没有运行)。我确信注释不会给我这种灵活性,并怀疑我需要手动为所讨论的类创建测试套件。但是,文档中没有提到任何关于这一点的内容,而是查看了API还不清楚如何以编程方式(即如何以编程方式创建Test或与由@Ignore注释?)

如果有人在过去做过类似的事情,或者对其他事情有一个很好的想法,我会很高兴听到的。


查看完整描述

3 回答

?
qq_笑_17

JUnit的方法是在运行时执行此操作org.junit.Assume.

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());
     // rest of setup.
 }

你可以在@Before方法,或者在测试本身中,但不是在@After方法。如果您在测试本身中这样做,您的@Before方法将运行。你也可以在@BeforeClass若要防止类初始化,请执行以下操作。

假设失败导致测试被忽略。

编辑:@RunIf注释JUnit-EXT,它们的示例代码如下所示:

@Testpublic void calculateTotalSalary() {
    assumeThat(Database.connect(), is(notNull()));
    //test code below.}

更不用说从Database.connect()用这种方法。


查看完整回答
反对 回复 2019-07-22
?
繁花不似锦

你应该退房Junit-ext项目。他们有RunIf执行条件测试的注释,如:

@Test@RunIf(DatabaseIsConnected.class)public void calculateTotalSalary() {
    //your code there}class DatabaseIsConnected implements Checker {
   public boolean satisify() {
        return Database.connect() != null;
   }}

[代码示例摘自教程]


查看完整回答
反对 回复 2019-07-22
?
跃然一笑

在JUnit 4中,另一个选项可能是创建一个注释,以表示测试需要满足您的自定义条件,然后用您自己的方法扩展默认的运行程序,并使用反射,将您的决策建立在自定义条件的基础上。它看起来可能是这样的:

public class CustomRunner extends BlockJUnit4ClassRunner {
    public CTRunner(Class<?> klass) throws initializationError {
        super(klass);
    }

    @Override
    protected boolean isIgnored(FrameworkMethod child) {
        if(shouldIgnore()) {
            return true;
        }
        return super.isIgnored(child);
    }

    private boolean shouldIgnore(class) {
        /* some custom criteria */
    }}


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信