如果变量值为 null,则忽略 JUnit 测试

Ignore JUnit tests if variable value is null

我有一个 JUnit 测试 class,其中 运行 有 15 个测试。其中 5 个测试是可选的,因为我只希望 运行 如果特定变量被参数初始化,则它们。如果变量值为空,我想忽略这些测试。这可能吗?如果可能,怎么办?

方法一:

您可以使用 JUnit-ext。它具有执行条件测试的 RunIf 注释,例如:

@Test
@RunIf(DatabaseIsConnected.class)
public void calculateTotalSalary() {
    //your code there
}

class DatabaseIsConnected implements Checker {
   public boolean satisify() {
        return Database.connect() != null;
   }
}

方法二

另一种方法是使用Assume。您可以在 @Before 方法或测试本身中执行此操作,但不能在 @After 方法中执行。如果您在测试中这样做,您的 @Before 方法将得到 运行。您也可以在 @BeforeClass 内执行此操作以防止 class 初始化。例如:

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());

 }

方法 3

我认为你的另一种选择可能是创建一个注释来表示测试需要满足你的自定义标准,然后用你自己的扩展默认 运行ner 并使用反射,根据你的决定在自定义标准上。它可能看起来像这样:

    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 */
    }
}

您可以使用 JUnit4 的 Assume 功能...

It's good to be able to run a test against the code as it is currently written, implicit assumptions and all, or to write a test that exposes a known bug. For these situations, JUnit now includes the ability to express "assumptions"

例如:

 @Before
 public void setUp() {
     org.junit.Assume.assumeTrue(yourCondition());
     // ...
 }

如果 yourCondition() 不 return 则 @Before 为 运行 的测试将不会被执行。