JUnit的acsubyTrue如何与“之前”和“之后”的注释一起工作?

2022-09-03 16:09:48

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

但是,我想知道该方法的性质。如果收到具有 false 值的参数,它是跳过方法的其余部分(用 )进行注释,还是执行其余指令的其余部分。assumeTrue@BeforeClass

我也很好奇它对注释如下的方法可能具有的任何其他含义:

@After

@Before

@AfterClass

编辑:

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

对我来说,跳过该方法的其余部分以及它也忽略了并且除了if被放置在方法中之外,这有点令人惊讶。文档没有指定这种行为(我在提出问题之前检查了一下)。@Before@After@TestassumeTrue@BeforeClass

编辑2:在方法中使用是非常合理的,因为在运行测试套件之前,您可能需要检查环境变量(即您的构建/测试计算机需要资源)。这有助于避免由慢速系统引起的测试失败(如超时)。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

答案 1

@Before, @BeforeClass带注释的方法是 setUp 方法,即用于配置测试方法将使用的模拟行为的方法。这不用于运行任何测试用例。和 的情况也是如此,它应该用于注释拆解方法,并且不应包含任何测试。@After@AfterClass

现在,你应该在你的测试方法(注释)中使用Acsucase.assumeTrue()。是的,假设True(),如果使用计算为false的表达式调用,则测试将停止并被忽略。查看文档以获取更多信息。@Test

P.S - 这可能不是答案,但这是为了帮助她朝着正确的方向前进。

编辑 -

    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。因此,如果你在这里使用acucationTrue()并且它返回false,它会抛出一个假设ViolationException并停止将要发生的所有其他事情。因此,没有什么对你有用。意义?


答案 2

推荐