assumeTrue()如何在JUnit中工作

12 java junit

我正在寻找一些关于如何Assume.assumeTrue()在JUnit中工作的验证.我想在一个@BeforeClass方法中使用它,以便在不满足条件时可以避免运行我的测试套件.

但是,我想知道该方法的性质.如果assumeTrue接收带有false值的参数,它是否跳过方法的其余部分(用注释@BeforeClass)或者是否执行剩余的其余指令.

我也很好奇它可能对注释的方法有任何其他影响:

@After

@Before

@AfterClass

编辑:

在通过一个非常基本的测试assumeTrue(false)运行之后,如果一直运行,那么该方法的其余部分将被忽略,以及任何使用@Test @After或注释的方法@Before.

对我来说,有一点令人惊讶的是,方法的其余部分被跳过,以及它也被忽略的事实@Before以及if @After除了放在方法中之外.文档没有指定那种行为(我在询问问题之前检查过).@TestassumeTrue@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)

Pra*_*tik 2

@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 并停止所有其他将要发生的事情。因此,没有什么对你有用。说得通?