[英]How does assumeTrue() work in JUnit
我正在寻找一些关于Assume.assumeTrue()
如何在JUnit中工作的验证。 我想在@BeforeClass
方法中使用它,以便在不满足条件时可以避免运行我的测试套件。
但是,我想知道该方法的性质。 如果assumeTrue
接收到带有false值的参数,它是否会跳过方法的其余部分(使用@BeforeClass
注释)或者是否执行剩余的其余指令。
我也很好奇它可能对注释的方法有任何其他影响:
@After
@Before
@AfterClass
编辑:
在通过一个非常基本的测试运行之后,如果运行了assumeTrue(false)
,那么将忽略该方法的其余部分以及使用@Test
@After
或@Before
注释的任何方法。
对我来说,有一点令人惊讶的是,除了@Test
之外,如果将assumeTrue
放在@BeforeClass
方法中,它还会忽略@Before
和@After
。 文档没有指定那种行为(我在询问问题之前检查过)。
Edit2:在@BeforeClass
方法中使用assumeTrue()
是非常合理的,因为在运行测试套件之前可能需要检查环境变量(即您的构建/测试机器是否有资源)。 这有助于避免因系统速度慢而导致测试失败(如超时)。
所以我仍然不确定为什么这会如此艰难......
我试过的测试看起来像这样
@BeforeClass
public static void beforeClassMethod()
{
System.out.println("BeforeClass assume");
Assume.assumeTrue(false);
System.out.println("AfterClass assume");
}
@Before
public void beforeMethod()
{
System.out.println("Before");
}
@Test
public void testMethod()
{
System.out.println("Test");
}
@After
public void afterMethod()
{
System.out.println("After");
}
@AfterClass
public static void afterClassMethod()
{
System.out.println("AfterClass");
}
Output:
BeforeClass assume
AfterClass
@Before, @BeforeClass
注释方法是setUp方法,即用于配置测试方法将使用的模拟行为的方法。 这不用于运行任何测试用例。 @After
和@AfterClass
的情况也是如此,它应该用于注释拆解方法,不应该包含任何测试。
现在,你应该使用Assume.assumeTrue()在您的测试方法( @Test
注释)。 是的,assumeTrue(),如果使用表达式求值为false调用,则测试将暂停并被忽略。 查看文档以获取更多信息。
PS - 这可能不是答案,但它是为了帮助她朝着正确的方向前进。
编辑 -
To me it was a little surprising that the rest of the method was skipped as
well as the fact that it also ignored @Before and @After in addition to @Test if
assumeTrue is placed in the @BeforeClass method. The documentation doesn't
specify that sort of behavior (which I checked before asking the question).
要回答这个问题,它一点也不奇怪。 @BeforeClass是设置测试用例时运行的第一种方法。 它是一个静态setUp方法,它调用一次来为所有测试用例执行setUp。 因此,如果您在此处使用assumeTrue()并返回false,则会抛出assumeViolationException并暂停其他所有将要发生的事情。 因此,没有什么对你有用。 说得通?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.