JUnit如何处理单元测试?

时间:2012-12-17 21:06:23

标签: java multithreading junit

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

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

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

4 个答案:

答案 0 :(得分:2)

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

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

  • 是每个测试都在自己的线程中执行? (这可能会导致问题) - 所有测试的一个线程
  • 是顺序执行的那些测试吗? -
  • 他们是否有特定的顺序(不是很重要,但很高兴知道) - 没有,事先不可能预先知道@Test方法的处理顺序班级。但是使用@Rules,您可以按顺序读取当前测试的编号

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

答案 3 :(得分:1)

对于每个测试类:

  1. 调用@BeforeClass和/或@ClassRule注释。
  2. 对于每个测试(@Test):
    1. 创建班级的实例
    2. 致电@Before和/或@Rule注释
    3. 通话测试方法
    4. 致电@After和/或@Rule注释
  3. 调用@AfterClass或@ClassRule注释。
  4. 通常一切都在同一个线程中运行 - 但是不要依赖它,因为一些规则(超时)会分叉一个线程 - 你可以决定并行运行测试。

相关问题