为junit的@FixMethodOrder创建我自己的MethodSorter

时间:2012-12-05 12:19:51

标签: junit junit4

junit 4.11附带@FixMethodOrder - 注释,这使得可以选择MethodSorter实现来订购junit测试。有三种默认排序器JVMNAME_ASCENDINGDEFAULT

现在,我想创建自己的MethodSorter。任何人都可以帮我指点如何做到这一点吗?

1 个答案:

答案 0 :(得分:10)

简答

这并不容易,并且不鼓励,因为JUnit不鼓励依赖测试。

长答案

有关详细信息,请参阅SortMethodsWith allows the user to choose the order of execution of the methods within a test class的扩展讨论。

JUnit不鼓励人们编写依赖于其他测试的测试。在@FixMethodOrder讨论之后引入了Sort test methods for predictability

基本问题是Java 7在使用反射来查找方法时,不会以一致的顺序返回它们。使用Java 6,几乎可以保证它们按照它们在源文件中出现的顺序返回。情况已不再如此。

某些测试类具有相关测试(无论是设计还是偶然)。 Sort test methods for predictability至少保证这些测试将以一致的顺序执行。但是,此排序基于方法的hashCode,因此排序 确定性,但很难预测。因此,如果您对测试的排序存在问题,那么如何修复排序并不容易或明显。您必须找到具有更高/更低hashCode的测试方法名称。

引入了

@FixMethodOrder以允许用户轻松修复订购问题,只需更改名称即可。但是,至少对我来说,它被视为一种临时修复,直到破坏的测试可以修复。

另请注意,您通常可以从surefire指定测试执行顺序,并且ant中也有类似的选项。

有关详细信息,我刚刚发布了a blog post on this very subject