Dom*_*aja 88 java testng unit-testing
我有一个抽象基类,我用它作为单元测试的基础(TestNG 5.10).在这个类中,我初始化我的测试的整个环境,设置数据库映射等.这个抽象类有一个带有@BeforeClass
注释的方法来进行初始化.
接下来,我使用特定的类扩展该类,其中我有@Test
方法和@BeforeClass
方法.这些方法对类环境进行特定于类的初始化(例如,将一些记录放入数据库中).
我如何强制执行@BeforeClass
注释方法的特定顺序?我需要抽象基类中的那些在扩展类之前执行.
例:
abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@BeforeClass
doSpecificInitialization() {...}
@Test
doTests() {...}
}
Run Code Online (Sandbox Code Playgroud)
预期订单:
A.doInitialization
B.doSpecificInitialization
B.doTests
Run Code Online (Sandbox Code Playgroud)
实际订单:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization // <---not executed
B.doTests) // <-/
Run Code Online (Sandbox Code Playgroud)
For*_*ega 99
编辑:下面的答案适用于JUnit,但无论如何我都会留在这里,因为它可能会有所帮助.
根据JUnit api:"超类的@BeforeClass方法将在当前类之前运行."
我测试了这个,它似乎对我有用.
但是,正如@Odys在下面提到的那样,对于JUnit,您需要以不同的方式命名两个方法,否则将导致仅运行子类方法,因为父级将被遮蔽.
Boz*_*zho 46
不要把它@BeforeClass
放在abstract
课堂上.从每个子类中调用它.
abstract class A {
void doInitialization() {}
}
class B extends A {
@BeforeClass
void doSpecificInitialization() {
super.doInitialization();
}
@Test
void doTests() {}
}
Run Code Online (Sandbox Code Playgroud)
看起来像TestNG @BeforeClass(dependsOnMethods={"doInitialization"})
- 尝试一下.
小智 7
我添加public
到抽象类和TestNG(6.0.1)之前执行了doInitialization()doTests
.doInitialization()
如果public
从A类中删除,TestNG不会执行.
public abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@Test
doTests() {...}
}
Run Code Online (Sandbox Code Playgroud)
我刚用5.11尝试了你的例子,我首先调用了基类的@BeforeClass.
你可以发布你的testng.xml文件吗?也许你在那里同时指定A和B,而只需要B.
随意关注testng-users邮件列表,我们可以仔细查看您的问题.
- 塞德里克
归档时间: |
|
查看次数: |
49562 次 |
最近记录: |