[英]Unit Testing Composite Service Methods
我正在為一個實現暴露接口的類編寫(junit)單元測試,其方法如下:
public Set<Setting> getUserSettings();
public Set<Setting> getOrganizationSettings();
public Set<Setting> getDefaults();
public Set<Setting> getAllSettings();
從特定層獲取設置的方法從各個位置執行IO以檢索其結果。 getAllSettings()返回所有級別的所有設置的單個集合,其中“最高”級別具有首選項(即,如果默認和用戶級別中存在設置,則將使用用戶級別中的設置。
我已經為getUserSettings(),getOrganizationSettings(),getDefaults()編寫了單元測試,用Mocked對象模擬了IO操作。
getAllSettings()的實現看起來像
public Set<Setting> getAllSettings(){
Set<Setting> defaults = getUserSettings();
Set<Setting> custom = getOrganizationSettings();
Set<Setting> undefined = getDefaults();
//perform some sorting and business logic
//return fully sorted set
}
我的問題在於如何對getAllSettings()方法進行單元測試。 我是否對用戶/組織/默認設置方法使用的所有下游資源調用使用模擬(使用easymock / powermock)? 似乎會有更清潔/更好/更簡單的方法來做到這一點。
您可以使用以下格式編寫測試
@Test
public void testGetAllSettings() {
Foo fixture = new Foo() {
public Set<Setting> getUserSettings() { // canned impl }
public Set<Setting> getOrganizationSettings() { // canned impl }
public Set<Setting> getDefaults() { // canned impl }
}
Assert.assertEquals(whatEverItShouldEqual, fixture.getAllSettings());
}
這將允許您測試獲取所有設置的邏輯,獨立於其他方法。
另一種方法是模擬這些方法的IO。 如果你有一個執行IO邏輯的層,那么可以嘲笑它。 如你所說,如果你有很多依賴,這可能會很痛苦。 也許表明你需要更少的依賴? (也許這個班級應該分成更小的單位?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.