【发布时间】:2014-11-15 12:35:09
【问题描述】:
我正在尝试寻找一种方法来使用 Mockito 测试我的实体;
这是简单的测试方法:
@Mock
private EntityManager em;
@Test
public void persistArticleWithValidArticleSetsArticleId() {
Article article = new Article();
em.persist(article);
assertThat(article.getId(), is(not(0L)));
}
如何最好地模拟 EntityManager 将 Id 从 0L 更改为即 1L 的行为?可能在可读性方面的障碍最少。
编辑: 一些额外的信息;在测试范围之外,EntityManager 由应用程序容器生成
【问题讨论】:
-
一些额外的信息;在测试范围之外,EntityManager 由应用程序容器 (glassfish) 生成。
-
您可以简单地测试 Article 类的 setId() 和 getId() 方法。我认为没有必要模拟 EntityManager 并告诉它将 id 设置为文章。当您要检查 id 是否生成并设置为您传递的实体以进行持久化时,此测试将更适合对 EntityManager 本身进行单元测试。
-
使用模拟库并不是最好的情况。仔细看看你的测试——你在这里测试的是检查模拟库是否有效,而不是测试你的代码。如果您需要模拟/存根被测类的内部组件的行为并且您知道该组件在特定情况下的行为方式,则 Mocks 很有用。
标签: java junit mockito hamcrest