正确的方法来设计和测试这个类

时间:2013-10-10 05:45:00

标签: java unit-testing mocking tdd

我正在开发一个解释器,并希望对解释模型的“execute”方法进行内部测试。 execute方法没有输入或输出,所以测试方法的唯一方法(至少从我所知道的)是模拟内部方法调用,看它们是按正确的顺序执行的。

目前我有以下课程:

  1. ExecutableInstance - 可以执行的模型类。
  2. ExecutableInstanceFactory - 创建可执行实例的单例类(实现为枚举),具有不同的方法,具体取决于给定的参数。
  3. ModelAnalyzer - 包含分析模型的方法的单件类
  4. 解释器调用execute()类的ExecutableInstance方法,然后调用ModelAnalyzer来理解模型中的内部可执行实例。然后,它会使用ExecutableInstance创建新的ExecutableInstanceFactory,然后根据模型的定义方式调用其execute()方法。

    我的想法是模拟ExecutableInstanceFactory类,以便它返回模拟ExecutableInstace,然后我可以测试执行顺序。但这意味着我必须将ExecutableInstanceFactory注入ExecutableInstance。因为它是一个单身人士,所以将它作为参数传递将是愚蠢和愚蠢的。我曾想过将谷歌的Guice用于DI ......但是我一直试图这样做。

    我的指示是否正确?如果是这样,应该如何实施?

2 个答案:

答案 0 :(得分:1)

我会从这个execute方法中创建一些较小的方法。例如 - 一种用于解析的方法,它将某些内容返回给execute方法,然后另一种方法用返回的数据执行某些操作并返回其他数据等。然后,您不必测试Execute方法,只测试较小的方法。这也可以让您更容易地发现错误。

答案 1 :(得分:1)

  

执行方法没有输入或输出

因此,应该在班级的协作者(使用模拟)上验证行为。

  

由于它是一个单身人士,将它作为参数传递将是愚蠢和愚蠢的。

您在测试时遇到问题,这表明您的设计存在缺陷。摆脱单身并注入合作者。