1.概述

让我们假设我们对一些代码进行了测试,这些代码依赖于操作系统,并且只有在我们的测试机器运行在Linux上时才应该运行。如果它运行在任何其他操作系统上,我们希望测试不会失败,而是在运行时被忽略。

第一种方法是使用两个如果语句来检查此条件系统类的属性。当然,这是可行的,但是JUnit有一个更干净、更优雅的方法。

在这个简短的教程中,我们将看看中如何有条件地运行或忽略测试JUnit4使用认为

2.认为

该类提供了一组方法来支持基于某些条件的条件测试执行。我们的测试只有在满足所有这些条件时才会运行。如果不是这样,JUnit将跳过它的执行,并将其标记为在测试报告中传递。后者是与前者的主要区别断言类,其中失败的条件导致测试结束为失败

值得注意的是我们描述的行为认为类专属于默认的JUnit运行器。和定制的跑步者,情况可能会有所不同。

最后,与与之一样断言,我们可以拨打电话认为方法中的@Before或者@课前注释方法或内部@Test方法本身。

现在让我们经历最有用的方法认为通过展示一些示例来初始化。对于下面的所有示例,让我们假设getosname()返回Linux。

2.1。使用假使,假设

assumeThat ()方法检查状态—在本例中,getosname()-满足传入匹配器的条件:

@Test public void whensumethatandosislinux_thenruntest () {sumethat (getOsName(),是(“Linux”));assertequal(“运行”,“运行”.toLowerCase ());}

在这个例子中,我们检查是否getosname()等于Linux。作为getosname()返回Linux,测试将运行。注意,我们用的是Hamcrest匹配器方法是(T)在这里匹配。

2.2。使用假设

类似地,我们可以用assumeTrue ()方法指定一个布尔表达式,该表达式的值必须为真的为了进行测试运行。如果评估为,测试将被忽略:

private boolean isExpectedOS(String osName) {return "Linux".equals(osName);} @Test public void whenAssumeTrueAndOSIsLinux_thenRunTest(){假定true (isExpectedOS(getOsName()));assertequal(“运行”,“运行”.toLowerCase ());}

在这种情况下,isExpectedOs ()返回真的。因此,测试运行的条件已经满足,测试将运行

2.3。使用assumeFalse

最后,我们可以使用相反的方法assumeFalse ()方法指定一个布尔表达式,该表达式的值必须为为了进行测试运行。如果评估为真的,测试将被忽略:

@Test public void whensumefalandosislinux_thenignore () {sumefalse (isExpectedOS(getOsName()));assertequal(“运行”,“运行”.toLowerCase ());}

在这种情况下,如isExpectedOs ()返回真的,没有满足运行测试的条件,测试将被忽略

2.4。使用Arsmotnull.

当我们想忽略一个测试,如果某个表达式是空值,我们可以使用Arsumotnull()方法:

@Test public void当假设enotnullandnotnullosversion_thenrun(){假设enotnull (getOsName());assertequal(“运行”,“运行”.toLowerCase ());}

作为getosname()返回一个非空值,则运行测试的条件已满足,测试将运行。

2.5。使用ArsumenoException.

最后,我们可能希望在抛出异常时忽略测试。我们可以使用assumeNoException ()以此目的:

@test公共void whenassumenoExceptionAndExceptionThrown_thenignore(){assertequals(“一切正常”,“一切正常”.tolowercase());字符串t = null;尝试{T.Charat(0);catch(nullpointerexception npe){AssultenoException(NPE);} assertequals(“运行”,“运行”.tolowercase());}

在这个例子中,如t空值,一个NullPointerException因此,抛出异常没有满足运行测试的条件,测试将被忽略

3.我们应该把它放在哪里assumeXXX电话吗?

注意这一点很重要的行为assumeXXX方法取决于我们把它们放在测试中的什么位置

让我们稍微修改我们的假使,假设例如:assertequal ()呼叫第一个。另外,让我们制作assertequal ()失败:

@Test public void whensumefalandosislinux_thenignore () {assertEquals("运行","运行");assumeFalse (isExpectedOS (getOsName ()));}

当我们运行这个例子时,我们有:

org.junit.comparisonFailure:预期:运行实际:运行

在这种情况下,我们的测试没有被忽略,因为它在我们到达assumeThat ()调用。所有的assumeXXX方法。所以,我们需要确保我们将它们放在测试方法中正确的位置

4.结论

在这篇简短的教程中,我们看到了如何使用认为类在JUnit 4。如果我们使用JUnit 5,它也可以在5.4或更高版本中提供

与往常一样,可以找到我们所讨论的示例的源代码在GitHub

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>查看课程
对这篇文章的评论关闭!