그래서 단위 테스트를 수행하려는 벨로우 (bellow) 방법이 있습니다. 유닛 테스트 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가 아닙니다. 그것은 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);
}
따라서 테스트 사례를 통과합니다. 그러나 모든 사람들이 내가 실제로 테스트하고있는 것을 조롱하는 것은 확실하지 않습니다. 단지 그 메소드가 호출되고 있음을 보여주기 때문입니다. 하지만 그들이 assockEquals를 사용할 수 있는지 잘 모르고 있기 때문에 예외적 인 문제가 발생하더라도 위의 코드를 추가해야합니다.
그럼 내 질문 : 방법에 대해 적절한 단위 테스트 케이스가 있어야한다고 언급 했습니까?
감사합니다.
시간 내 주셔서 감사합니다. 하지만 이해할 수없는 점은 저장소 개체를 조롱하고 findList 호출시 이러한 프로젝트를 반환하도록 지시하면됩니다. 그러면 내가 말한 것을 되돌려 줄 것이다. 그래서 내가 원하는 것을 반환한다고 말했을 때 무엇을 비교해야합니까? 그러면 기준이 작동하는지 여부에 관계없이 원하는 것을 반환 할 것입니다. 유일한 것은 내가 초기 프로젝트를 수행 할 수 있고 기준이 맞는지 아닌지를 확인하는 것입니다.하지만 저장소를 조롱하는 것과 올바른 결과를 반환하는지 확인할 수 있습니까? – Sara
내가 조롱하는 문제는 일반적으로 저장소를 조롱하고 반환 유형으로 기대하는 바를 말하면 올바른 데이터를 반환하는지 테스트 할 수 있습니까? 내가 놓친 게 있니? – Sara
단위 테스트의 요점은 (통합 테스트와 반대되는) 당신이'CreateMyRepositoryWrapper'를 테스트하고 싶지 않다는 것입니다. 그 클래스는 제대로 작동 할 것이라고 가정합니다 (다른 테스트를 기반으로합니다). 조롱 할 때, 당신은 "내 리포 사이토이가 이것을한다고 가정 해 -이 방법이 내가 예상 한대로 작동합니까?"라고 말합니다. 이런 식으로, 당신은'myRepository.findList'가 null을 리턴하는 것과 같은 다른 시나리오를 쉽게 테스트 할 수 있습니다 -이 메소드에서 null 또는 빈리스트를 리턴하고 싶습니까? myRepository.findList가 예외를 던졌습니다. 예외를 처리하고 싶습니까? – jhericks