[英]Should simple classes be mocked in unit-tests or should they be used/tested directly?
我不確定我的方法TranslateResponse()
還可以測試什么。
它基本上檢查翻譯器的類型並調用翻譯器相關的set()
方法。
public async Task TranslateResponse(Policy response)
{
foreach (var t in await _translatorFactory.BuildTranslators())
{
var policyTranslator = t as IPolicyAwareTranslator;
policyTranslator?.SetPolicy(response);
var additionalInterestTranslator = t as IAdditionalInterestAwareTranslator;
additionalInterestTranslator?.SetAdditionalInterests(response.AdditionalInterests);
var locationsTranslator = t as ILocationsAwareTranslator;
locationsTranslator?.SetLocations(response.Locations);
}
}
我正在為TranslateResponse()
方法編寫測試用例。 據我所知,我正在驗證對相應方法的調用是否基於提供的翻譯器類型發生。 測試用例行
Mock<ITranslator> mockedTranslator = new Mock<ITranslator>();
mockedTranslator.Setup(t => t.Translate(_translatorDataAccessor.Object));
var mockedPolicyTranslator = mockedTranslator.As<IPolicyAwareTranslator>();
mockedPolicyTranslator.Setup(t => t.SetPolicy(It.IsAny<Policy>()));
mockedPolicyTranslator.Verify(t => t.SetPolicy(It.IsAny<Policy>()), Times.AtLeastOnce);
我的擔憂是
我很想知道我是否可以測試比驗證呼叫更多的東西?
我應該在這里還是在它自己的類中測試 set() 方法的邏輯? 即使這樣,我也無法弄清楚在Set()
的測試用例中要斷言什么,這將使用傳入的參數設置私有字段。
public class PolicyTranslator : ITranslator, IPolicyAwareTranslator
{
private Policy _policy;
public void SetPolicy(Policy policy)
{
_policy = policy;
}
//translate()
}
基本上沒有更多可以測試的,只是
此外,您可能想要
.FirstOrDefault()
。BuildTranslators
元素的BuildTranslators
也是有效的。在大多數情況下,不應在單元測試中測試SUT依賴項,因為
對於簡單的情況,例如,有問題的代碼實際上會簡化事情,因為您不再需要模擬IPolicyAwareTranslator
並且可以簡單地測試按預期設置的值,但即使在這種情況下也有一個小陷阱:
IPolicyAwareTranslator
- 有人可以將var policyTranslator = t as IPolicyAwareTranslator;
替換var policyTranslator = t as IPolicyAwareTranslator;
使用var policyTranslator = t as PolicyTranslator;
並且測試仍然會通過,盡管它不能再處理我們的關鍵業務AwesomePolicyAwareTranslator
。您可能會說它基本上是 電影情節威脅,如果您知道自己在做什么並且不太費力,則只需將多個類作為一個子系統進行測試。
盡管在大多數情況下,我會反對這種“低級集成測試”,當您可以進行適當的隔離時,更簡單! 單元測試。
低級集成測試 - 這基本上是一個虛構的術語,但我會說它非常適合此類測試。
盡管如此,在某些情況下,粗粒度的“低級集成測試”可能比包含相同代碼的單元測試略好:
在這種情況下,“低級集成測試”以合理的價格為您提供了很多(我們不應該忘記 100% 的覆蓋率是無法獲得的,不能以低廉的價格構建適當的測試金字塔,因此具有成本效益的測試方法是必需品)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.