junit 4.11附带@FixMethodOrder
- 注释,这使得可以选择MethodSorter实现来订购junit测试。有三种默认排序器JVM
,NAME_ASCENDING
和DEFAULT
。
现在,我想创建自己的MethodSorter。任何人都可以帮我指点如何做到这一点吗?
答案 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。