我正在使用带有eclipse的junit编写功能测试。
当运行单个测试时,它将按照我在类中设置它们的顺序运行。
例如。
testCreateUser
testJoinUserToRoom
testVerify
testDeleteUser
但是,当我将此测试作为套件的一部分运行时(在包中),顺序是随机的。
例如,它将执行验证,然后删除用户,然后删除joinuserToRoom然后创建用户。
我在套件中的测试并不相互依赖。但是,测试中的每个单独测试都取决于它们以正确的顺序运行。
有什么办法可以实现?
谢谢。
您不能保证JUnit 中测试 方法 的执行顺序。
可以* 保证套件中测试 类
的执行顺序(如果使用Suite),但是不能通过反射找到测试类的执行顺序(例如,如果您在Eclipse中运行包)
,或来自Maven或ant的一组测试)。这可能由ant或maven定义,但JUnit并未定义。
*
通常,JUnit按照在源文件中定义的顺序执行测试方法,但是并非所有的JVM都保证这样做(尤其是JVM
7)。如果某些方法是从抽象基测试类继承的,那么这可能也不成立。(这听起来像您的情况,但我无法从您的描述中看出来)。
那么,您该怎么做才能解决您的问题呢?有两种解决方案。
在原始示例中,您实际上只有一个测试(验证),但是您有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
}
}
对我来说,这更容易理解,而且您可以进行独立测试,这是一件好事。这就是我要做的,但是您将需要对测试进行一些重构。您也可以使用RuleChain堆叠这些规则。
如果确实要在测试方法之间引入依赖关系,则第二种选择是查看TestNG,在其中可以定义从一个测试到另一个测试的依赖关系。
问题内容: 如何确定unittest方法的顺序?字母或数字前缀是否正确? 要么 问题答案: 您可以通过将sortTestMethodsUsing设置为None来禁用它:http ://docs.python.org/2/library/unittest.html#unittest.TestLoader.sortTestMethodsUsing 对于纯单元测试,您是对的。但是对于组件测试和集成测试…
如何按特定顺序运行quarkus测试?通常我们有@InSequence注释(来自arquillian IIRC),我们可以实现这一点。 但是我没有找到任何类似的Quarkus在"org.junit.jupiter.api"软件包提供Quarkus-朱尼5。 它将以一个替代的顺序运行,我试图使用org.junit.jupiter.api.顺序与@Testmetodorder(方法命令。nnotati
我正在通过运行Jest测试。默认情况下,Jest并行运行测试。有没有办法让测试按顺序运行? 我有一些测试调用依赖于更改当前工作目录的第三方代码。
问题内容: 我有一些测试UI的测试,也可以用来创建数据。 单独的一组测试依赖于此数据,这意味着这些测试必须仅在第一组运行之后才能运行。 我知道要运行一组或使用标签运行它们,但是如何按特定顺序运行它们呢? 问题答案: Nightwatch将按顺序运行特定文件中的每个测试,因此(一个简单的)解决方案是将每个测试按您希望它们运行的顺序放入同一文件中。 如果单个文件的测试太多,这将变得很麻烦。要解决此
问题内容: 我想用JUnit测试来验证Java中集合的排序算法。如果我在集合中输入“ B”,“ C”,“ A”并希望对其进行排序(例如,按字母顺序排列),那么使用JUnit进行测试的正确方法是什么? 我实现了Comparable接口,并希望确保排序工作正常。 我想这个问题可以从Java或JUnit扩展到任何语言的常规测试。 问题答案: 我将按 预期的 顺序创建另一个具有值的集合,然后仅检查结果是否
我使用PyCharm来运行一个相当大的测试套件(1800个快速测试)。最近修改了一个测试,我意识到我的测试不会出错。当我单独运行这些测试时,确实会中断,但是如果我运行整个测试套件,它们总是会通过。这是由于一些以前的同事对类的这种不正确的嘲笑: 我现在需要检查整个测试套件中模拟的使用情况,但是我想单独运行每个测试,看看哪些测试没有通过(我将这些测试标记为高优先级)。我怎么能从控制台或Py魅力中做到这