dej*_*avu 10 java junit testng
为什么@BeforeClass在方法JUnit是static,而在TestNG它的non-static?TestNG开发是为了改进JUnit,为什么他们选择这种实施方式?
因为@BeforeClass只运行一次,所以使它static比使它非静态更有意义.同样在TestNG中,@BeforeClass调用该方法的实例是什么?有人能引用一个例子来更好地理解吗?
See*_*ose 12
JUnit和TestNG之间的主要区别是测试类实例化.JUnit总是为每个测试方法运行创建一个新的测试类实例.TestNG只创建一个测试类实例,然后运行此实例的所有测试方法.
JUnit方法保证了所有测试方法的独立性.它无关紧要,它们以何种顺序运行.此外,对于每种测试方法,所有实例字段的设置始终相同.初始化数据(所有测试方法都很常见)必须在类级别进行,因此必须是静态的.这就是为什么@BeforeClass方法必须是静态的原因.
TestNG approch不保证独立性.实际上,您不能以与JUnit测试中相同的方式使用实例字段.如果在一个测试方法中更改了这样的字段,则更改的值仍然在另一个测试方法中是observabl.但是,这种行为也有一个优点:有时候某些测试方法之间存在依赖关系.使用TestNG,测试人员可以表达它们.
由于TestNG的单实例方法,@ BeforeClass设置也可以是非静态方法,但它仍然只运行一次.这是一个设计决策,但使用TestNG的测试人员必须意识到这一点.
使方法成为静态或非静态与在开始时只能调用该方法一次无关。您可以根据需要多次调用静态方法。您可以精确地调用一个非静态方法。两者之间没有必然的关联:静态和调用一次。至少,我不知道使方法静态化从而使其能够被调用一次的任何直接后果。static与单个类正确关联,但与单个调用不相关。
将方法设置为静态可以防止它访问类的非静态成员。但是,通过使用非静态@BeforeClass方法,您还可以访问非静态成员,从而为您提供了更多访问类变量的范围。@BeforeClass也许这就是 testng 取消方法静态限制的原因。
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |