【问题标题】:Mockito- Need help learning from exampleMockito-需要帮助从示例中学习
【发布时间】:2014-05-09 21:25:46
【问题描述】:

我需要为我当前的项目学习 Mockito 并且正在努力奋斗。我可能会补充一点,我也从来没有学过任何关于单元测试的东西(对于那个母校来说,java 学的很少,哈哈)所以我似乎必须同时学习多种东西。我花了一段时间查看 Mockito 上的一些资源,但仍然可以使用一些帮助。下面我创建了一个小例子,希望有人能回答我在 Mockito 中为它创建 JUNIT 的问题。

public class Animal{

    public numberOfTeeth(AnimalType animal){
          if animalAlive(){
               Teeth tooth= animal.getNumberOfTeeth();
                if(tooth== null) {     
                    throw new ValidationException("Invalid Tooth");        
                 }
          }
    }

请原谅语法错误,这是一个快速编写的学习示例。

因此,可以说 animalAlive() 是 Animal 类中的私有方法,而 getNumberOfTeeth() 是其他类中的公共方法。我假设一个junit测试可能会测试是否应该抛出异常?最好的方法是什么?

我会假设它涉及模拟 AnimalType 和创建存根(?)来控制 numberOfTeeth 方法中的两个方法调用? Animal 类中的 Private 方法会影响任何事情吗?

【问题讨论】:

标签: java spring-mvc mocking mockito


【解决方案1】:

为了彻底彻底地测试此方法,我想说您需要以下三个场景的测试用例。

  • 当动物活着且牙齿数量为空时抛出异常,
  • 动物活着且牙齿不为空时也不例外,
  • 动物死亡时也不例外。

所以你需要以下内容。

  • 要测试的 Animal 对象,
  • 一个嘲笑的AnimalType
  • 一个有效的Tooth 对象,可能是也可能不是模拟对象,
  • JUnit ExpectedException 规则 - 还有其他测试抛出异常的方法,但这是最通用的,所以我建议现在学习使用它,并在所有涉及异常的测试中使用它,甚至如果它看起来有点矫枉过正。

在您的AnimalTest 课程中,您将拥有三种测试方法,一种用于您要测试的每种场景。

numberOfTeethFailsForLiveAnimalWithInvalidTeeth

  1. 使用例外规则“预期”ValidationException
  2. 致电numberOfTeeth 使用您的模拟AnimalType 来处理活体动物。因为你没有存根getNumberOfTeeth(),它会返回null,所以应该抛出异常。

numberOfTeethSucceedsForLiveAnimalWithValidTeeth

  1. 存根模拟 AnimalType 以从 getNumberOfTeeth() 返回有效的 Tooth
  2. 致电numberOfTeeth,使用您的模拟AnimalType 联系活体动物。

不需要验证任何东西——这个方法完成的事实意味着没有抛出异常。

numberOfTeethSucceedsForDeadAnimal

  1. 调用任何你需要调用的方法,让你的动物“没有生命”。
  2. 致电numberOfTeeth,使用您的模拟AnimalType 联系活体动物。

同样,不需要验证任何东西——这个方法完成的事实意味着没有抛出异常。

您可以做一些小事来改进您的代码。

  • 不要将AnimalType 参数称为animal,当您有一个名为Animal 的类型时 - 这太令人困惑了。
  • getNumberOfTeeth() 方法使用不同的名称 - 它不返回数字,而是返回 Tooth,所以这个名称也令人困惑。
  • 为您的错误消息使用常量。这样,在使用异常规则的测试方法中,您可以验证错误的文本是否正确,但实际上在执行此操作时使用了常量。不复制文本可降低在应用程序类中更改消息的危险,但在测试类中则不会。

【讨论】:

  • 谢谢,这是一个深思熟虑的答案,它对我帮助很大。我很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2016-04-11
相关资源
最近更新 更多