assumeTrue()如何在JUnit中工作

时间:2015-05-07 21:52:28

标签: java junit

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

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

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

@After

@Before

@AfterClass

修改

通过非常基本的测试运行后,如果运行assumeTrue(false),则将忽略该方法的其余部分以及使用@Test @After或{注释的任何方法{1}}。

对我而言,有一点令人惊讶的是,除了@Before @Before之外,它还忽略了@After@Test放在assumeTrue方法中。文档没有指定那种行为(我在询问问题之前检查过)。

Edit2:@BeforeClass方法中使用assumeTrue()非常合理,因为可能存在环境变量(即您的构建/测试计算机对资源有压力)可能想在运行测试套件之前检查一下。这有助于避免因系统速度慢而导致测试失败(如超时)。

所以我仍然不确定为什么这会如此努力......

我跑过的测试看起来像这样

@BeforeClass

1 个答案:

答案 0 :(得分:1)

@Table(name = "route") public class Route { public static final String SELECT_ALL = "Route.selectAll"; @Id @Column(name = "route_number") private int route_number; @Column(name = "destination") private int destination; @Column(name = "frequency") private int frequency; @Column(name = "start") private int start; private Set<Operator> operators = new HashSet<Operator>(); public Route(){} // getters & setters @ManyToOne @JoinColumn(name="start") private BusStop startRef; @ManyToOne @JoinColumn(name="destination") private BusStop destRef; 带注释的方法是setUp方法,即用于配置测试方法将使用的模拟行为的方法。这不用于运行任何测试用例。与@Before, @BeforeClass@After的情况相同,它应该用于注释拆解方法,不应包含任何测试。

现在,您应该在测试方法(@AfterClass注释)中使用Assume.assumeTrue()。是的,assumeTrue(),如果使用表达式求值为false调用,则测试将暂停并被忽略。查看docs了解详情。

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

编辑 -

@Test

要回答这个问题,它一点也不奇怪。 @BeforeClass是设置测试用例时运行的第一种方法。它是一个静态setUp方法,它调用一次来为所有测试用例执行setUp。因此,如果您在此处使用assumeTrue()并返回false,则会抛出assumeViolationException并停止其他所有其他事件。因此,没有什么对你有用。有意义吗?