好的,所以@Ignore注释有助于标记不应运行测试用例。
@Ignore
但是,有时我想忽略基于运行时信息的测试。例如,如果我有一个并发测试需要在具有一定数量内核的机器上运行。如果这个测试是在单处理器机器上运行的,我认为只通过测试是不正确的(因为它还没有运行),而且测试失败并破坏构建肯定是不对的.
所以我希望能够在运行时忽略测试,因为这似乎是正确的结果(因为测试框架将允许构建通过但记录测试未运行)。我相当确定注释不会给我这种灵活性,并且怀疑我需要为相关类手动创建测试套件。但是,文档没有提到任何关于此的内容,并且通过API也不清楚这将如何以编程方式完成(即,我如何以编程方式创建与注释创建的实例Test或类似实例?)。@Ignore
Test
如果有人过去做过类似的事情,或者对我还能如何解决这个问题有一个好主意,我会很高兴听到这个消息。
JUnit 方法是在运行时执行此操作是org.junit.Assume.
org.junit.Assume
@Before public void beforeMethod() { org.junit.Assume.assumeTrue(someCondition()); // rest of setup. }
您可以在@Before方法或测试本身中执行此操作,但不能在@After方法中执行。如果您在测试本身中执行此操作,您的@Before方法将运行。您也可以在内部执行此操作@BeforeClass以防止类初始化。
@Before
@After
@BeforeClass
假设失败会导致测试被忽略。
编辑: 为了与来自 junit-ext@RunIf的注释进行比较,他们的示例代码如下所示: __
@RunIf
@Test public void calculateTotalSalary() { assumeThat(Database.connect(), is(notNull())); //test code below. }
更不用说以Database.connect()这种方式从方法中捕获和使用连接要容易得多。
Database.connect()