所以我有波纹管方法,我想对它进行单元测试。
public List<Project> getProjects(Task task) {
Criteria<Project> criteria = this.myRepository.getCriteria(Project.class);
criteria.add(Comparison.eq("order", task.getOrder()));
criteria.addOrder(Order.asc("projectNumber"));
return this.myRepository.findList(Project.class, criteria);
}
因此它实际上获取了任务对象(它是一个JPA模型对象)并抛出项目表并查找具有此项目订单的所有项目。订单在两个表中都很常见。
无论如何,查询本身不是那个imp。它查询db并返回一些数据。现在我的问题是如何使用easymock对此进行单元测试?
@Test
public void testGetProjects() throws Exception {
myRepository = new CreateMyRepositoryWrapper(); --> This is a class which just returns the entityManger. but here we can consider this as a pojo.
Task task = EasyMock.createNiceMock(Task.class);
Order bom = EasyMock.createNiceMock(Order.class);
Project project= EasyMock.createNiceMock(Project.class);
project.setProjectName("project"); ------> Can I call a seeter on a mocked object?
project.setProjectNumber("1");
EasyMock.replay(project);
List projects= new ArrayList(Arrays.asList(project));
bom.setProjects(projects); ------------> Does it make sense to do this?
EasyMock.expect(task.getOrders()).andReturn(bom);
TestClass instance = new TestClass();
instance.setMyRepository(myRepository);
EasyMock.replay(task,bom);
instance.getProjects(task);
}
所以这通过了测试用例。但我不确定所有那些嘲笑我实际上正在测试的东西。因为它只是表明正在调用这些方法。但是因为他们被嘲笑我不确定我是否可以使用assertEquals,即使我可以得到一个例外,因为我必须在上面的代码中添加更多内容。
所以我的问题:对于提到的方法应该是什么样的单元测试用例?
感谢。
答案 0 :(得分:1)
我认为你有这种嘲讽倒退。模拟myRepostory,然后设置myRepository模拟以返回Criteria对象,并在将Criteria对象传递给findList时返回项目列表。
任务,订单和项目可能只是实例化。
现在,instance.getProjects(task)将返回一些内容。您可以检查以确保返回的内容与您应该从findList返回的内容相同。现在你已经测试了一些东西,虽然没什么特别有趣的。
您可能希望验证条件对象在传递给findList之前是否已正确设置。要做到这一点,您要么必须将标准设为模拟,那么您可以设置对所调用方法的期望。这里棘手的部分是Hibernate Restriction类没有非默认的equals实现,所以你必须编写自己的匹配器来检查传递给条件的Restrictions是否与你期望的Restrictions相同(功能上)。 / p>
另一种可能性是将标准设置为实际的Criteria对象。 (您仍然设置myRepository模型以返回它。)然后,在调用函数之后,您可以使用toString()方法上的某些子字符串匹配或您知道的任何其他方式来检查Criteria对象。
最终(单元测试)的可能性是不使用Criteria对象的模拟框架,但是您编写的一些手工编码框架允许您检查添加到其中的所有限制。
所有这些都是这个方法的一个很好的例子,实际上是通过集成测试进行测试。你最后做了很多工作来验证一些不太有趣的东西,如果你试图重构代码,你的测试会变得非常脆弱。 (我自己完成了,所以我从经验中说出来。)