簡體   English   中英

我將如何測試使用共享私有/公共方法的兩種方法?

[英]How would I test two methods that use shared private/public method?

public class A {
    public List<Model> getModels() {
        List<Model> models = (some logic to find all models...)
        models.forEach(model -> doSharedLogic(model));
    }

    public Model getModel(int id) {
        Model model = (some logic to find Model by Id...)
        doSharedLogic(model);
    }    

    private void doSharedLogic(Model model) {
        // manipulations with model...       
    }
}

假設我有上面的代碼。 我想對 public API(getModels 和 getModel 方法)進行單元測試。 他們使用提取到單獨方法 doSharedLogic() 中的共享邏輯。

問題:如果基本邏輯完全相同,如何正確測試這兩種方法?
**我的假設:**
通過測試 doSharedLogic() 的所有可能結果來測試 getModel 方法;
對 getModels() 做同樣的事情;

但它會導致測試中的代碼重復。
如果我只是將 doSharedLogic 作為這些公共方法之一(例如:getModel())的一部分進行測試,我不能確定以后不會有人來,更改某些內容並破壞第二種方法(getModels())中的代碼例如刪除共享邏輯

我的假設:測試 getModel 方法,測試 doSharedLogic() 的所有可能結果;對 getModels() 做同樣的事情;

我會測試每種方法的作用並避免重復。

  • 您有 getModel() 獲取單個實例。 測試與獲取一個實例相關的情況,包括邊緣情況,例如未找到。 如果這段代碼也在做數據轉換,那么我會在這里測試轉換后的數據是否正確,可能使用模擬來注入數據。
  • 你有 getModels() 得到倍數 - 如果它不接受一些查詢字符串,那么所有這些都可能。 測試返回多個模型的案例,包括單個案例或空案例。 由於此代碼只是在幕后調用 getModel(),因此您不應重現任何轉換邏輯測試,而應專注於測試“get many”的附加邏輯。

如果您真的擔心有人稍后會更改 getModels() 的 lgoic 以不調用 getModel(),我會將其放在 getModel() 的評論中,以便未來的編輯知道如果他們刪除該依賴項,他們可能需要添加額外的測試.

我絕對不會在兩者中添加一堆重復的數據轉換測試。

暫無
暫無

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

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