java - @BeforeClass注解: Junit vs TestNG

标签 java junit testng

为什么 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/

相关文章:

java - 如何在gwttestcase中使用junit测试gwt requestbuilder?

java - 如何在Android中使用on循环在onCreate()中启动多个线程而又未使用for循环启动线程(IllegalThreadStateException)?

java - 如何在 Eclipse 中运行简单的 JUnit 测试

java - 断言失败后如何不停止执行?

java - 将 Hashtable 数组转换为对象数组

java - 调用方法时出现错误

java - 我们可以使用junit编写功能测试吗?

java - 有没有办法验证在使用 JUnit 时是否在测试方法中调用了 try/catch 指令的 Catch 部分?

selenium - 在 ReportNG 中未获取 TestNG 的报告

java - 如何通过 bundle 发送双值