我目前正在使用我使用xUnit,AutoMoq,AutoFixture和AutoFixture.XUnit2一起拋出的測試框架。我遇到了使用通用簽名模擬方法的問題。使用具有通用簽名的AutoMoq方法
AutoFixture似乎處理泛型項目就好了。如果我要求一個CustomeObject<Task<List<Task<string>>>>
或其他一些荒謬的嵌套泛型類型,它似乎會按預期一直生成它們到最後一個節點。
但是,如果我有一個這樣的接口:
public interface ITestInterface{
T Get<T>();
}
,然後嘗試從我從AutoMoq了模擬調用該方法,它只是返回null。因此,例如:
[Theory]
[MyAutoDaqaAttribute]
public async Task ATest(
Mock<ITestInterface> service
) {
var result = service.Object.Get<string>();
}
在此代碼中,結果將爲空。這對我來說似乎很奇怪。它不應該去自動混合,並嘗試創建一個類型T的值,即一個新的字符串?看起來Autofixture已經表明它可以很好地處理泛型。
或者你總是隻需要手動設置任何在其簽名中具有通用性的模擬方法?
對,我應該怎麼使用方式已經AutoConfiguredMoqCustomizations指出。但是感謝您確認AutoConfiguredMoqCustomizations無法配置泛型方法。 所以看起來我無法避免進行某種程度的設置,但我至少可以避免使用ReturnsUsingFixture來設置返回值。我會試試看。謝謝。 – Riplikash