如何选择性地将某些junit测试标记为失败,将某些测试标记为跳过

问题描述 投票:2回答:2

我测试过:

public class MyTest {

@Test
public void test_1(){
    assertTrue(false);
}

@Test
public void test_2(){
    assertTrue(false);
}

和CustomListener:

public class CustomerListener extends RunListener {

   @Override
   public void testFailure(Failure failure) throws Exception {
      if(some_condition) {
        super.testAssumptionFailure(failure);
      } else {
        super.testFailure(failure);
      }
 }

使用maven运行测试:

mvn test -Dtest=MyTest.java

CustomerListener工作但所有时间测试标记为失败('some_condition'为真)。如何使用CustomerListener将某些测试标记为跳过?

java maven junit
2个回答
0
投票

RunListener不适合你,因为listener方法只会被JUnit调用,以通知听众发生的事件。侦听器无法干扰或停止事件本身的执行。

如果将忽略测试方法,您将需要一个可以在运行时控制的自定义JUnit运行器(如here所述):

public class MyRunner extends BlockJUnit4ClassRunner {
    public MyRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }
    @Override
    protected boolean isIgnored(FrameworkMethod method) {
        if(method.getName().equals("test_1")) {
            return true;
        }
        return super.isIgnored(method);
   }
}

然后可以在您的测试类中使用:

@RunWith(MyRunner.class)
public class MyTest {

    [...]
}

但正如khmarbaise提出的那样,使用assume可能是更好的解决方案。


0
投票

谢谢werner,但我找到了下一个解决方案

 public class CusomIgnoreRule implements TestWatcher {
   @Override
public Statement apply( final Statement base, final Description description ) {
    return new Statement() {
        @Override
        public void evaluate() throws Throwable {
            try {
                base.evaluate();
            }
            catch ( Throwable t ) {
                if(some_condition) {
                   throw new AssumptionViolatedException("do this so our test gets marked as ignored")
                }
                throw t; 
            }
        }
    };
}

并在测试中:

public class MyTest {

@Rule
public CusomIgnoreRule rule = new CusomIgnoreRule();

@Test
public void test_1(){
    assertTrue(false);
}

@Test
public void test_2(){
    assertTrue(false);
}
© www.soinside.com 2019 - 2024. All rights reserved.