所以我有我要执行单元测试的波纹管方法。使用easymock测试一个方法的单元
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。它查询数据库并返回一些数据。现在我的问题如何使用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,即使我可以得到一个异常因为我必须添加更多上面的代码,我认为。
所以我的问题:对于提到的方法什么应该是适当的单元测试用例?
谢谢。
非常感谢您的时间。但我不明白的是,如果我嘲笑仓库对象,并告诉它在findList调用时返回这些项目。然后它会返回我所说的。那么我应该怎样比较它,当我告诉它返回我想要的东西时,它会返回我想要的东西,无论标准是否有效。唯一的事情是我可以初始项目,然后检查标准是否正确。但是,我也可以检查它是否也会使用嘲讽库来返回正确的东西? – Sara 2012-07-19 17:52:12
我在这里嘲笑的问题是,如果我嘲笑知识库并告诉它我期待的返回类型,那么我怎样才能测试它是否返回正确的数据呢?我错过了什么吗? – Sara 2012-07-19 17:54:47
单元测试(而不是集成测试)的要点是你不想测试'CreateMyRepositoryWrapper'。你认为那个班级会正常工作(基于其他测试,你希望)。在嘲笑中,你说,“假设myRepository做到这一点 - 这种方法是否按我的预期工作?”通过这种方式,您可以轻松测试其他场景,例如'myRepository.findList'返回null - 是否要从此方法返回null或空列表?假设'myRepository.findList'抛出一个异常 - 我想处理这个异常还是让它级联? – jhericks 2012-07-19 20:12:27