【发布时间】:2016-04-26 02:07:31
【问题描述】:
我在 java 中有一个测试类,其中有几个由 @Test 注释的方法,不知何故,当我运行整个测试时,我想在方法 B 之前运行方法 A。有可能还是有必要?
【问题讨论】:
我在 java 中有一个测试类,其中有几个由 @Test 注释的方法,不知何故,当我运行整个测试时,我想在方法 B 之前运行方法 A。有可能还是有必要?
【问题讨论】:
这种对测试方法的依赖是糟糕的设计,应该避免。如果一个测试方法中有初始化代码需要在下一个测试方法中完成,则应将其分解到一个 setUp 方法中。
【讨论】:
我遇到的问题是报告。如果您想/需要查看每种测试方法是失败还是通过,那么您就完蛋了。
我了解您不希望一个测试建立在以前的测试之上,但无论如何,在某些情况下您可能需要它来执行此操作(或者您会将测试的复杂性增加一个数量级幅度)。
代码中的测试流程应该由测试的开发者还是框架的开发者来决定?
向 10 位 Java 开发人员展示 JUnit 测试代码,我敢打赌,大多数人会假设测试(无论外部如何)将按照它们在测试类中出现的顺序运行。
这不应该是 JUnit 的默认行为吗? (让我选择告诉它顺序,而不是让 JUnit 自己弄清楚”。)
更新:2014-11-18 较新版本的 JUnit 支持方法排序器
// 这会按字母顺序保存测试 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
如果您“真的”想要执行自己的特定顺序,我认为您可以创建自己的方法分类器。
【讨论】:
测试应该有独立的顺序,但有时我们没有我们想要的。 如果您有一个包含数千个测试的大型遗留项目,并且它们取决于它们的执行顺序,那么您将遇到很多问题,例如,当您尝试在 java 7 上迁移时,因为它会打乱所有测试。
您可以在此处阅读有关此问题的更多信息:
【讨论】:
如果只有两种方法,那么您需要将其包装在一个真正不依赖于顺序的单元测试中。
@Test
public void testInOrder() throws Exception {
testA();
testB();
}
【讨论】:
在测试前后使用以下设置
@Before
public void setUp() throws MWException {
}
@After
public void tearDown() {
}
【讨论】: