UnitTesting Fundamentals - 究竟要测试什么?

时间:2015-07-06 12:27:09

标签: java unit-testing integration-testing

我知道单元测试就是测试单个代码单元并模拟其他依赖项,如数据库连接,文件I / O等。

我对单元测试有几个问题

  1. 我们需要测试的单元测试中的“UNIT”是什么?这是一个班级的方法吗?还是用例?因为用例测试似乎更像是对我的集成测试。
  2. 模拟外部依赖项。这是否意味着模拟对任何外部类的所有引用,即使它是相同的包?

3 个答案:

答案 0 :(得分:2)

'单位'在单元测试中没有明确定义。

然而,它通常用于指代测试单个函数或方法的过程。像这样的单元测试通常组合成一组测试一组相关的功能或方法(例如一个类)。

您怀疑,在测试过程中,被测单元应与任何其他代码隔离。这使您可以确保在要测试的代码中发生任何错误。

为了更好,更详细的解释,我建议Martin Fowler's post on the issue of Unit Testing直接解决此问题:

  

单元测试经常在软件开发中被讨论,并且是我在编写程序的整个过程中熟悉的术语。然而,与大多数软件开发术语一样,它的定义非常不明确,我认为当人们认为它的定义比实际定义更紧密时,经常会出现混淆。

答案 1 :(得分:1)

那是什么" UNIT"在我们需要测试的单元测试中?这是一个班级的方法吗?还是用例?

  
    

芯片是RAM的一个单元。 Ram是主板单元,主板可以是边界环境中的一个单元。所以你的问题没有具体的答案。但主要是我们使用方法作为单位,因为它们是我们可以测试的最小元素。     有时甚至一个类或一个更大的组件都可以成为一个单元。这取决于你的背景以及特定的#34;单位"是

  

模拟外部依赖项。这是否意味着模拟对任何外部类的所有引用,即使它是相同的包?

  
    

如果您无法直接访问某些组件,则可以进行模拟。 (等等......)它在哪里并不重要。如果你想测试一些依赖于尚未实现的东西,你需要模拟。模拟应该取决于你想要测试的内容!

         
      

(例如,我想实施一个海啸警报系统,但是应该在海中的硬件(发送波形信号)尚未实现。所以如果我想测试我建造的警报系统,我可能需要模拟该硬件设备的行为)

    
  

答案 2 :(得分:0)

  1. 独立单元测试是指每项测试不应取决于其他测试的结果。

  2. 模拟外部依赖项正在替换一个简单的依赖项:I.E将数据库替换为对结果进行硬编码的模拟。

  3. 希望它有所帮助。