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

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

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

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

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

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


互换的青春
浏览 799回答 3
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()用这种方法。

繁花不似锦

你应该退房Junit-ext项目。他们有RunIf执行条件测试的注释,如:@Test@RunIf(DatabaseIsConnected.class)public void calculateTotalSalary() {     //your code there}class DatabaseIsConnected implements Checker {    public boolean satisify() {         return Database.connect() != null;    }}[代码示例摘自教程]

跃然一笑

在JUnit 4中,另一个选项可能是创建一个注释,以表示测试需要满足您的自定义条件,然后用您自己的方法扩展默认的运行程序,并使用反射,将您的决策建立在自定义条件的基础上。它看起来可能是这样的:public&nbsp;class&nbsp;CustomRunner&nbsp;extends&nbsp;BlockJUnit4ClassRunner&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;CTRunner(Class<?>&nbsp;klass)&nbsp;throws&nbsp;initializationError&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(klass); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;boolean&nbsp;isIgnored(FrameworkMethod&nbsp;child)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(shouldIgnore())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;super.isIgnored(child); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;boolean&nbsp;shouldIgnore(class)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;some&nbsp;custom&nbsp;criteria&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP