【发布时间】:2010-04-19 17:15:53
【问题描述】:
我想选择执行 JUnit 测试的顺序。 我有 4 个类,里面有几个测试方法,我的目标是执行例如 A 类的方法 Y,然后是 B 类的方法 X,最后是 A 类的方法 Z。
你能帮忙吗?
【问题讨论】:
标签: java netbeans junit testing
我想选择执行 JUnit 测试的顺序。 我有 4 个类,里面有几个测试方法,我的目标是执行例如 A 类的方法 Y,然后是 B 类的方法 X,最后是 A 类的方法 Z。
你能帮忙吗?
【问题讨论】:
标签: java netbeans junit testing
从 4.11 版本开始,您可以使用注解指定执行顺序并按方法名称排序:
import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {
@Test
public void test1Create() {
System.out.println("first");
}
@Test
public void test2Update() {
System.out.println("second");
}
}
【讨论】:
@FixMethodOrder注解时,遵循方法顺序。
通常,您无法指定单独的单元测试运行的顺序(尽管您可以在 TestNG 中指定优先级,并为每个测试设置不同的优先级)。但是,单元测试应该能够独立运行,因此测试的顺序应该无关紧要。这是一个不好的做法。如果您需要按特定顺序进行测试,您应该重新考虑您的设计。如果您详细说明需要订单的原因,我相信我们可以提供建议。
【讨论】:
JUnit 对这个问题的回答是创建一个像这样的测试方法:
@Test public void testAll() {
classA.y();
classB.x();
classA.z();
}
在某些情况下(设置和拆卸很重要),这显然是一个不令人满意的答案,但是单元测试的 JUnit 观点是,如果测试不是独立的,那么你做错了。
如果以上不能满足您的需求,请查看 TestNG。
【讨论】:
创建一个 TestSuite 并按所需顺序调用测试方法。 @Yishai 是正确的,因为 JUnit 的设计使每个测试都是独立的。因此,如果您正在调用 可以 独立运行的测试方法,那么创建 TestSuite 以涵盖特定调用顺序的场景应该没有问题。
【讨论】:
可以以任意顺序进行测试的一般评论/想法太强了。
这真的取决于你在测试什么。
例如,我正在测试一个我们有 changePassword 操作的服务器。
我认为测试的顺序很明显很关键。在 changePassword 之后,旧密码不再起作用,之前,它起作用。
我不想在每次测试后恢复服务器状态,工作量太大。完成所有测试后,我可以做一次。
【讨论】:
如果前面的答案不令人满意,我注意到 Sun JVM JUnit 似乎总是按照定义的顺序执行单元测试。 显然这不是一个好主意。
【讨论】:
您可能对此感兴趣:JExample
使用相互依赖的测试进行测试的不同方法。
【讨论】:
你可以使用@Order()注解
【讨论】:
你可以像 @Order 注释那样做
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MyTest {
@Test
@Order(1)
@DisplayName("First")
public void firstTest() {
System.out.println("a");
}
@Test
@Order(2)
@DisplayName("Second")
public void secondTest() {
System.out.println("b");
}
@Test
@Order(3)
@DisplayName("Third")
public void thirdTest() {
System.out.println("c");
}
}
输出
a
b
c
【讨论】: