assumeTrue()如何在JUnit中工作

我正在寻找一些关于Assume.assumeTrue()如何在JUnit中工作的validation。 我想在@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并暂停其他所有将要发生的事情。 因此,没有什么对你有用。 说得通?