2

我目前正在测试一个 Java 接口,该接口可以使用 Java 的 R 调用。因此我需要一个也封装了一个过程的连接。
现在我需要知道,JUnit 如何处理这些单元测试。我使用 JUnit4@Before@After注释来初始化一个新的连接(在内部它是一个进程)一次测试。
对于“JUnit 如何处理”,我的意思是:

  • 每个测试都在它自己的线程中执行吗?(这可能会导致问题)
  • 这些测试是按顺序执行的吗?
  • 他们有特定的顺序吗(不是那么重要,但很高兴知道)

我担心的是,如果在真实环境中正确使用(如文档所述),这些测试可能会导致不存在的问题。

4

4 回答 4

2

测试按顺序执行。你不应该依赖这个事实,因为这表明你没有编写一个纯粹的单元测试并且已经创建了一个反模式(在测试方面)。每个测试必须是它自己的独立工作,在初始化之外没有外部After依赖Before。我相信每个测试都是在自己的线程中执行的,这再次回到您的测试套件不是纯单元测试。

我担心的是,如果在真实环境中正确使用(如文档所述),这些测试可能会导致不存在的问题。

单元测试验证功能的一小部分,通常是一个可能的逻辑分支。如果您想测试系统集成,您需要进行所谓的集成测试。此外,如果您希望进行多线程测试,我强烈推荐: Multi-threaded TC

于 2012-12-17T21:13:49.703 回答
1

我相信,除非另有说明,否则 JUnit 可以随意使用尽可能多的线程来运行您的单元测试。您可以将其限制为单个线程。关于何时运行哪些测试的顺序是任意的。理论上,您的测试应该是适当的线程安全的,以避免从不同线程运行时出现不确定性问题。

于 2012-12-17T21:13:52.103 回答
1
  • 每个测试都在它自己的线程中执行吗?(这可能会导致问题) -一个线程用于所有测试
  • 这些测试是按顺序执行的吗?-是的
  • 他们是否有特定的顺序(不是那么重要,但很高兴知道) -,基本上不可能事先告诉类中 @Test 方法的处理顺序。但是使用@Rules,您可以按顺序读取当前测试的编号

  • 当然,我们在一个班级里讨论不同的测试。

于 2012-12-17T22:47:18.423 回答
1

对于每个测试类:

  1. 调用 @BeforeClass 和/或 @ClassRule 注释。
  2. 对于每个测试(@Test):
    1. 创建类的实例
    2. 调用 @Before 和/或 @Rule 注释
    3. 调用测试方法
    4. 调用 @After 和/或 @Rule 注释
  3. 调用 @AfterClass 或 @ClassRule 注释。

通常一切都在同一个线程中工作 - 但是不要依赖它,因为某些规则(超时)会分叉一个线程 - 您可以决定并行运行测试。

于 2012-12-17T23:31:46.667 回答