Pri*_*tel 2 eclipse testing junit selenium sequential
我正在使用junit和eclipse来编写函数测试.
运行单个测试时,它按照我在类中设置的顺序运行.
例如.
testCreateUser
testJoinUserToRoom
testVerify
testDeleteUser
Run Code Online (Sandbox Code Playgroud)
但是,当我将此测试作为套件的一部分运行时(因此在包中),顺序是随机的.
例如,它将执行验证,然后删除用户,然后joinuserToRoom,然后执行Createuser.
我在套件中的测试不依赖于彼此.但是,测试中的每个单独测试都依赖于它们以正确的顺序运行.
有什么办法可以实现吗?
谢谢.
您无法保证JUnit 中测试方法的执行顺序.
测试的执行顺序类的一个套件中的保证(如果你使用的套件),但执行的,如果测试类由反射出现的顺序是不是(例如,如果你在Eclipse中运行的程序包,或来自maven或ant的一组测试).这可以由ant或maven定义,但它不是由JUnit定义的.
通常,JUnit按照源文件中定义的顺序执行测试方法,但并非所有JVM都保证这一点(特别是JVM 7).如果某些方法是从抽象基础测试类继承的,那么这可能也不成立.(这听起来像你的情况,但我无法从你的描述中得知).
有关这方面的更多信息,请参阅我对JUnit4开始支持测试排序的答案?这是故意的吗?.
那么你可以做些什么来解决你的问题呢?有两种解决方案.
在您的原始示例中,您实际上只有一个测试(验证),但您有4个方法,两个设置(createUser,joinUserToRoom)和一个拆卸(deleteUser).因此,您的第一个选择是使用TestRule,特别是ExternalResource更好地定义测试用例.ExternalResource允许您定义测试的前/后行为,类似于@Before/@After.但是,优点ExternalResource是您可以将其从测试中分解出来.
因此,您将在外部资源中创建/删除用户:
public class UsesExternalResource {
@Rule
public ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
// create user
};
@Override
protected void after() {
// destroy user
};
};
@Test
public void testJoinUserToRoom() {
// join user to room
// verify all ok
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这更简单,更容易理解,并且您可以获得独立测试,这是一件好事.这就是我要做的,但你需要稍微重构一下你的测试.您还可以使用RuleChain堆叠这些规则.
如果您真的想在测试方法之间引入依赖关系,那么您的第二个选择是查看TestNG,您可以在其中定义从一个测试到另一个测试的依赖关系.
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |