为什么 JUnit
中的 @BeforeClass
方法是 static
而在 TestNG
中它的 non-static
? TestNG
是对JUnit
的改进,那么他们为什么选择这种实现方式呢?
因为 @BeforeClass
只运行一次,所以让它成为 static
比让它成为非 static 更有意义。同样在 TestNG 中,在哪个实例上调用了 @BeforeClass
方法?有人可以举个例子来更好地理解吗?
最佳答案
JUnit 和 TestNG 的主要区别在于测试类实例化。 JUnit 总是为每个测试方法运行创建一个新的测试类实例。 TestNG只创建一个测试类实例,然后运行该实例的所有测试方法。
JUnit 方法保证了所有测试方法的独立性。它们运行的顺序并不重要。此外,对于每种测试方法,所有实例字段始终设置为相同。初始化数据对于所有测试方法都是通用的,必须在类级别进行,因此它必须是静态的。这就是为什么 @BeforeClass 方法必须是静态的原因。
TestNG 方法不保证独立性。事实上,您不能像在 JUnit 测试中那样使用实例字段。如果您在一种测试方法中更改此类字段,则更改后的值在另一种测试方法中仍可观察到。但是,这种行为也有一个优点:有时某些测试方法之间存在依赖关系。使用 TestNG,测试人员可以表达它们。
由于 TestNG 的单实例方法,@BeforeClass 设置也可以是非静态方法,但它仍然只运行一次。这是一个设计决定,但使用 TestNG 的测试人员必须意识到这一点。
关于java - @BeforeClass注解: Junit vs TestNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394759/