簡體   English   中英

單元測試綜合服務方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM