JUnit4是否开始支持测试订购?这是故意的吗?

Tar*_*run 9 java junit junit4

JUnit的新手(事实上是JUnit 4)并且遇到了执行测试的套件方式

@RunWith(Suite.class)
@Suite.SuiteClasses(
        {                               
                CreateNewProfile.class,
                EditProfile.class,

        })
public class ProfileTestSuite {

}
Run Code Online (Sandbox Code Playgroud)

这是我在新雇主浏览测试代码库时遇到的代码示例.在执行期间,我资助 - 首先执行CreateNewProfile测试,然后执行EditProfile,这确实有意义,但之后它会在测试中引入依赖性.

我几个月来一直在遵循非依赖的测试机制(虽然我曾经使用过TestNG而不是JUnit),并且期望EditProfile也可以单独执行.那就是编辑配置文件应该负责创建配置文件然后编辑它然后断言操作.

我的问题是 - Junit 4引入了测试订购功能.是这个功能还是一个复活节彩蛋,因为我一直觉得JUnit =独立测试.

Mat*_*ell 20

没有JUnit不支持测试排序,除非你说的方式通过Suite.这仅定义了测试的执行顺序.这已经存在了很长时间,包括JUnit 3 Suite类.

有关更完整的解释,我们需要在此处讨论三件事:

  1. 测试套件中测试类的排序
  2. 通过Eclipse或Maven的反射找到测试类的顺序
  3. 测试类中测试方法的排序(使用@Test注释).

测试套件中测试类的排序

当您指定要在测试套件中执行的类的列表时,您将定义一个数组,并且这些测试类将按顺序执行,除非您执行并行执行.不幸的是,这允许在测试类之间引入依赖关系.

通过反射找到测试类的顺序

在类路径中搜索类时,不能保证找到它们的顺序,因此不能依赖它们.实际上并不是JUnit正在进行搜索,而是Eclipse Junit插件,或maven surefire或failafe.

测试类中测试方法的顺序

JUnit不保证在类中执行测试的顺序.大多数情况下,在版本7之前的大多数JVM上,使用反射找到它们的顺序是声明顺序,即它们在文件中的顺序.这是它们执行的顺序.但是,使用JVM 7时,不再保证这一点,因此不会有一致的顺序.有一个github问题#293使用建议的解决方案打开可预测性的测试方法,并且junit邮件列表上有一个线程:字母顺序测试方法运行顺序?.所以你不能依赖于使用JUnit执行测试的顺序,但目前正在讨论这个问题.

  • 马修:只有单元测试应该是独立的.对于功能测试,能够专门订购方法非常有用,这就是为什么它从版本1开始就是TestNG的一个功能. (2认同)

jeh*_*eha 5

不,不支持订购.是的,这是意图:

KentBeck发表评论(2010年12月30日): 独立测试更有价值,因此JUnit的设计不支持测试订购.

如果您需要此功能,可以使用TestNG @Test(sequential = true).