java - 设计和测试此类的正确方法

标签 java unit-testing mocking tdd

我正在开发一个解释器,想要对解释模型的“执行”方法进行内部测试。执行方法没有输入或输出,因此测试该方法的唯一方法(至少据我所知)是模拟内部方法调用以查看它们是否按正确的顺序执行。

目前我有以下类(class):

  1. ExecutableInstance - 可以执行的模型类。
  2. ExecutableInstanceFactory - 创建可执行实例的单例类(作为枚举实现),根据给定的参数使用不同的方法。
  3. ModelAnalyzer - 包含分析模型的方法的单例类

解释器调用 ExecutableInstance 类的 execute() 方法,然后调用 ModelAnalyzer 来了解模型。然后,它使用 ExecutableInstanceFactory 创建新的 ExecutableInstance,然后根据模型的定义方式调用其 execute() 方法。

我的想法是模拟 ExecutableInstanceFactory 类,以便它返回模拟 ExecutableInstace,然后我可以测试执行顺序。但这意味着我必须将 ExecutableInstanceFactory 注入(inject)到 ExecutableInstance 中。由于它是单例,因此将其作为参数传递将是愚蠢和愚蠢的。我想过使用 Google 的 Guice 进行 DI...但我一直在尝试这样做。

我的方向正确吗?如果是这样,应该如何实现?

最佳答案

我将从这个执行方法中创建一些较小的方法。例如 - 一种解析方法将某些内容返回到执行方法,然后另一种方法对返回的数据执行某些操作并返回其他数据等。然后您不必测试 Execute 方法,只需测试较小的方法。这也将使您能够更轻松地检测错误。

关于java - 设计和测试此类的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287943/

相关文章:

java - 如何在pom中引用第三方jar来创建 super jar

java - 应该如何处理模拟对象的差异?

java - 如何验证特定父构造函数的调用?

java - Java 中的欧拉计划 2

java - HazelcastClient 具有相同 HazelcastItance 的故障转移集群

c# - 什么是 Rhino Mocks Repeat?

java - 未完成的验证,在编写 JUnit 测试用例时缺少对 verify(mock) 的方法调用

unit-testing - 如何模拟 Grails 中 'src' 文件夹中的类(单元测试)

testing - 如何在使用 Cypress 的 E2E 测试中登录 Auth0?

java - 如何在 Spring 中映射请求参数?