我正在寻找关于Assume.assumeTrue()
如何在JUnit中工作的一些验证。我想在@BeforeClass
方法中使用它,以便在不满足条件时可以避免运行我的测试套件。
然而,我想知道该方法的性质。如果assumeTrue
收到带有false值的参数,它是否跳过方法的其余部分(用@BeforeClass
注释)或者是否执行剩余的其余指令。
我也很好奇它可能对注释的方法有任何其他影响:
@After
@Before
@AfterClass
修改
通过非常基本的测试运行后,如果运行assumeTrue(false)
,则将忽略该方法的其余部分以及使用@Test
@After
或{注释的任何方法{1}}。
对我而言,有一点令人惊讶的是,除了@Before
@Before
之外,它还忽略了@After
和@Test
放在assumeTrue
方法中。文档没有指定那种行为(我在询问问题之前检查过)。
Edit2:在@BeforeClass
方法中使用assumeTrue()
非常合理,因为可能存在环境变量(即您的构建/测试计算机对资源有压力)可能想在运行测试套件之前检查一下。这有助于避免因系统速度慢而导致测试失败(如超时)。
所以我仍然不确定为什么这会如此努力......
我跑过的测试看起来像这样
@BeforeClass
答案 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并停止其他所有其他事件。因此,没有什么对你有用。有意义吗?