JUnit假设

时间:2020-02-23 14:35:23  来源:igfitidea点击:

JUnit假设可以帮助我们跳过某些特定场景的测试。
有时,我们的测试用例取决于输入,操作系统或者任何第三方数据。
如果我们的测试不是针对某些特定输入编写的,则可以使用假设跳过我们的测试方法。

JUnit假设

JUnit Jupiter Assumptions类提供了一组有用的假设方法。
将它们导入我们的测试程序并编写流利的代码是个好主意。

import static org.junit.jupiter.api.Assumptions.*;

假设我们有一个定义为的测试方法:

@ParameterizedTest
@ValueSource(ints = {1,2,3,-1})
void test(int i) {
	try {
		Thread.sleep(i);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}

为简单起见,我使用的是" ValueSource",但我们可以使用第三方方法来输入输入的测试数据。
如果我们进行以上测试,则其中一项测试将失败。

assumeTrue()

如果输入数字为负,我们可以使用假定True()跳过测试。
下面是更新的代码:

@ParameterizedTest
@ValueSource(ints = {1,2,3,-1})
void test(int i) {
	assumeTrue(i >=0);
	//assumeTrue(i >=0, "Wrong Input, Only positive ints please");
	try {
		Thread.sleep(i);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}

现在,当我们运行测试时,当输入数字为负数时,JUnit将跳过。

assumeFalse()

我们可以使用假定的false()来验证条件是否返回false。
假设我们有一种不想与" root"用户一起运行的测试方法。
在这种情况下,我们可以使用系统环境变量来使用假定错误()来跳过测试。

@Test
void test_assumeFalse() {
	assumeFalse("root".equals(System.getenv("USER")));
	//code that I don't want to run as root user
}

assumingThat()

如果假设有效,则此方法执行提供的Executable。
如果假设无效,则此方法不执行任何操作。
当我们的假设有效时,我们可以将其用于日志记录或者通知。

@Test
void test_assumingThat() {
	assumingThat("hyman".equals(System.getenv("USER")), 
      () -> {System.out.println("USER is hyman, continue further");});
}

JUnit假设与断言

JUnit assert用于为我们的测试方法编写测试方案。
而假设是用来验证我们测试用例的有利条件。

如果JUnit assert失败,则测试失败。
如果junit假设失败,则跳过测试方法。