所以我有我要執行單元測試的波紋管方法。使用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