我正在寻找一些关于如何Assume.assumeTrue()
在JUnit中工作的验证.我想在一个@BeforeClass
方法中使用它,以便在不满足条件时可以避免运行我的测试套件.
但是,我想知道该方法的性质.如果assumeTrue
接收带有false值的参数,它是否跳过方法的其余部分(用注释@BeforeClass
)或者是否执行剩余的其余指令.
我也很好奇它可能对注释的方法有任何其他影响:
@After
@Before
@AfterClass
编辑:
在通过一个非常基本的测试assumeTrue(false)
运行之后,如果一直运行,那么该方法的其余部分将被忽略,以及任何使用@Test
@After
或注释的方法@Before
.
对我来说,有一点令人惊讶的是,方法的其余部分被跳过,以及它也被忽略的事实@Before
以及if @After
除了放在方法中之外.文档没有指定那种行为(我在询问问题之前检查过).@Test
assumeTrue
@BeforeClass
Edit2:assumeTrue()
在@BeforeClass
方法中使用是非常合理的,因为在运行测试套件之前可能需要检查环境变量(即您的构建/测试机器是否有资源).这有助于避免因系统速度慢而导致测试失败(如超时).
所以我仍然不确定为什么这会如此艰难......
我试过的测试看起来像这样
@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
Run Code Online (Sandbox Code Playgroud)
@Before, @BeforeClass
带注释的方法是设置方法,即用于配置测试方法将使用的模拟行为的方法。这不用于运行任何测试用例。@After
和 的情况也是如此@AfterClass
,它应该用于注释拆卸方法,并且不应包含任何测试。
现在,您应该在测试方法(@Test
注释)中使用 Assume.assumeTrue() 。是的,假设True(),如果使用计算结果为假的表达式调用,测试将停止并被忽略。检查文档以获取更多信息。
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).
Run Code Online (Sandbox Code Playgroud)
回答这个问题一点也不奇怪。@BeforeClass 是设置测试用例时运行的第一个方法。它是一个静态设置方法,调用一次即可为所有测试用例执行设置。因此,如果您在这里使用 ShouldTrue() 并且它返回 false,它会抛出一个假设ViolationException 并停止所有其他将要发生的事情。因此,没有什么对你有用。说得通?
归档时间: |
|
查看次数: |
6958 次 |
最近记录: |