簡體   English   中英

人們在這種情況下如何編寫單元測試

[英]How do people write unit test in this scenario

我對單元測試有疑問。

我將測試一個模塊,該模塊是Web服務的適配器。 測試的目的不是測試Web服務,而是測試適配器。

服務提供的一個函數調用如下:

class MyAdapterClass {

  WebService webservice;

  MyAdapterClass(WebService webservice) {
    this.webservice = webservice;
  }

  void myBusinessLogic() {
    List<VeryComplicatedClass> result = webservice.getResult();
    // <business logic here>
  }
}

如果要對myBusinessLogic函數進行單元測試,通常的方法是使用getResult()函數設置為某些預定義的返回值注入模擬的Web服務版本。

但是這里我的問題是,真正的Web服務將返回一個非常完整的類的列表,每個類都具有數十個屬性,並且該列表可能包含數百甚至數千個元素。

如果要使用Mockito或類似方法手動設置結果,則需要進行大量工作。

人們在這種情況下通常會做什么? 我要做的只是連接到真實的Web服務,然后再次測試真實的服務。 有事可做嗎?

非常感謝。

您可以編寫代碼來調用真實的Web服務,然后將List<VeryComplicatedClass>序列化為磁盤上的文件,然后在模擬設置中反序列化它,並讓mockwebservice.getResult()返回該對象。 這樣可以節省您手動構建對象層次結構的時間。

更新:這基本上也是吉爾伯特在評論中建議的方法。


但是實際上..您不想建立一個非常完整的類的列表,每個類都具有數十個屬性,並且該列表可能包含數百個甚至數千個元素 ,您想要設置一個模擬或存根以捕獲所需的最小數量。圍繞業務邏輯編寫斷言。 這樣,測試可以更好地傳達其真正關心的細節。 更具體地說,如果業務邏輯在VeryComplicatedClass上調用2或3個方法,則您希望測試明確,即這些是測試所斷言的條件所必需的。

我讀過這些評論的一個想法是要引入一個新的接口,該接口可以包裝List<VeryComplicatedClass>並使myBusinessLogic代替該接口。

然后,很容易(/更容易)對新接口的實現進行存根或模擬,而不是處理您幾乎無法控制的非常復雜的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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