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

Eir*_*gre 6 junit junit4

junit 4.11附带@FixMethodOrder-annotation,这使得可以选择MethodSorter实现来订购junit测试.有三个默认分拣机JVM,NAME_ASCENDINGDEFAULT.

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

Mat*_*ell 10

简答

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

答案很长

有关更多信息,请参阅有关SortMethodsWith的扩展讨论,允许用户选择测试类中方法的执行顺序.

JUnit不鼓励人们编写依赖于其他测试的测试.@FixMethodOrder是在讨论排序测试方法的可预测性之后介绍的.

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

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

@FixMethodOrder介绍是为了让用户轻松修复他们的订购问题,只需更改名称即可.但是,至少对我来说,它被视为一个临时修复,直到破坏的测试可以修复.

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

有关更多信息,我刚刚发布了关于这个主题的博客文章.