【问题标题】:Jmock mock DAO objectJmock 模拟 DAO 对象
【发布时间】:2010-03-30 14:44:59
【问题描述】:

我写了一个方法来检索特定的字符串列表,给定一个正确的字符串键。现在,当我创建一个列表(要通过上一句中描述的方法检索的列表)并创建测试时,我可以轻松获得结果并成功通过测试。

另一方面,如果我将此列表的内容保存到数据库的 2 列中,keyvalue 我编写了一个类,该类使用其中的方法检索这些项目。当我将它打印出来控制台时,预期的结果是正确的,现在我从应用程序上下文初始化我的 DAO,在它的 bean 内部它获取会话并且因为 DAO 工作。

现在我正在尝试编写一个模拟 DAO 的测试,因为我在本地运行测试而不是在服务器上......所以我告诉 jmock 模拟它:

private MyDAO myDAO;

在设置()中

myDAO = context.mock(MyDAO.class);

我认为我是否正确地模拟了它,我怎样才能模拟数据库中的这些数据?最好的方法是什么?

有没有好的 Jmock 文档?在他们的官方网站上它不是很好也不是很清楚,你必须知道你在寻找什么才能找到它,同时找不到很酷的东西。

或者有人可以用这种方法帮助我:

如何创建仅用于测试的应用程序上下文,以在服务器上实例化 DAO 和少数 bean。所以我可以在测试中使用它吗?也欢迎提出建议,解释。谢谢

【问题讨论】:

  • 你还没有告诉我们问题出在哪里...mock(MyDAO.class) 不起作用吗?
  • @skaffman nop 模拟不起作用..我模拟确实创建了错误的 dao 对象,但我没有从它的方法中得到任何结果,该方法应该在给定字符串键的情况下检索字符串
  • @Bozho 在帖子中写任何东西,所以我接受你的回答我设法通过你提供的链接完成了这个,我想接受你的回答

标签: java junit dao jmock


【解决方案1】:

Thisthis 的帖子描述了如何以及为什么要测试 DAO。 (如果您不使用它们,您可以轻松地将 spring 和 maven 从示例中分离出来 - 重点是使用 HSQLDB)

【讨论】:

  • 使用 mocks,缺点是您必须实现可能复杂的 DAO/JPA/Database 行为(例如,存储导致私有 @Id 字段被设置)。但是,使用模拟,您可以生成错误响应,这可能难以使用分阶段数据创建。此外,使用模拟框架,您可以将测试数据保存在测试本身的本地,而不是单独的文件中。它是否正确?您如何权衡这种权衡?
  • 我认为模拟 dao 很少有道理 - 你需要有一个非常复杂的模拟。
  • 如果你最终得到一个复杂的模拟,你就会遇到不同的设计问题。这表明您的某些界面太大了。
  • 现在你甚至可以使用 Testcontainers 运行真实的数据库:testcontainers.org
【解决方案2】:

MyDAO 是一个接口,你只能做一个接口的mock。

【讨论】:

  • 其实你可以模拟类,但是我们不建议在紧急情况下使用。
猜你喜欢
  • 2012-03-16
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多