junit 4.11 带有@FixMethodOrder
-annotation,它可以选择 MethodSorter 实现来对 junit 测试进行排序。共有三个默认排序器JVM
,NAME_ASCENDING
和DEFAULT
。
现在,我想创建自己的 MethodSorter。任何人都可以帮助我提供有关如何做到这一点的任何指示吗?
这并不容易,也不鼓励这样做,因为 JUnit 不鼓励依赖测试。
有关更多信息,请参阅有关 SortMethodsWith 的扩展讨论,允许用户选择测试类中方法的执行顺序。
JUnit 不鼓励人们编写依赖于其他测试的测试。@FixMethodOrder是在对Sort test methods for predictability的讨论之后引入的。
基本问题是 Java 7 在使用反射查找方法时,不会以一致的顺序返回它们。使用 Java 6,几乎可以保证它们会按照它们在源文件中出现的顺序返回。这已不再是这种情况。
一些测试类具有依赖测试(无论是设计还是偶然)。可预测性的排序测试方法至少可以保证这些测试将以一致的顺序执行。但是,这个排序是基于方法的 hashCode 的,所以排序是确定性的,但是很难预测。因此,如果您的测试排序确实存在问题,那么如何修复排序并不容易或显而易见。您必须找到具有更高/更低 hashCode 的测试方法名称。
@FixMethodOrder
引入的目的是让用户只需更改名称即可轻松解决他们的订购问题。但是,至少对我来说,它被视为临时修复,直到可以修复损坏的测试。
另请注意,您通常可以从surefire中指定测试执行顺序,并且在 ant 中也有类似的选项。
欲了解更多信息,我刚刚发表了一篇关于这个主题的博文。