0
我想通過委託工廠傳遞一個存根對象時,測試一個類的行爲。我做了一個測試版本,其中所有類的依賴項(工廠除外)都作爲Mock對象傳遞,它的工作方式應該如此。現在我正在嘗試使用AutoMock來讓容器自動創建模擬。使用mock.Provide()來建立一個委託工廠,在SUT的構造函數中使用
我有問題在使用mock.Provide()在ClassUnderTest的構造函數中傳遞委託工廠的具體值。 (如this comment建議)
類,我測試:
public ClassUnderTest
{
private readonly firstField;
private readonly Func<string, ISecondField, IThirdField, IResultField> resultFieldFactory;
private int someCounter = -1;
public ClassUnderTest(IFirstField firstField, Func<string, ISecondField, IThirdField, IResultField> resultFieldFactory)
{
this.firstField = firstField;
this.resultFieldFactory= resultFieldFactory;
}
public methodToTest()
{
IResultField resultField = resultFieldFactory(someString, secondFieldValue, thirdFieldValue);
resultField.AddToList();
}
}
業務邏輯模塊:
public class BusinessLogicModule: Module
{
//some other things that work
builder.RegisterType<ClassUnderTest>().As<IClassUnderTest>();
builder.RegisterType<SecondField>().As<ISecondField>();
builder.RegisterType<ThirdField>().As<IThirdField>();
builder.RegisterType<ResultField>().As<IResultField>();
}
測試類:
[TestClass]
public class TestClass()
{
private IFirstField firstField;
private Func<string, ISecondField, IThirdField, IResultField> funcToTriggerIResultFieldFactory;
[TestInitialize]
public void Setup()
{
this.firstField= Resolve<IFirstField>();
this.secondField= Resolve<ISecondField>();
this.funcToTriggerIResultFieldFactory = Resolve<Func<string, ISecondField, IThirdField, IResultField>>();
}
[TestMethod]
public void testMethodWithAutoMock()
{
using (var automock = AutoMock.GetLoose())
{
//trying to setup the SUT to get passed a "concrete" object
autoMock.Provide(funcToTriggerIResultFieldFactory(stringValue, secondFieldValue, thirdFieldValue));
var sut = autoMock.Create<IClassUnderTest>;
sut.MethodToTest();
//asserts
}
}
}
我禾如果有任何跡象表明我做錯了,我會很感激。我錯過了什麼?它怎麼能被修復?這是一個簡單的語法修復,或者是我的這個測試方法有問題嗎?
提前感謝您的時間。
通常您使用模擬庫來嘲笑依賴關係,而不是嘗試將模擬添加到DI容器,因爲移動部件太多。你的測試應該對這個類非常具體,所以你只需要設置一些(如果有的話)模擬 –
它不應該是autoMock.Create而不是IClassUnderTest?什麼是實際問題?您是否收到編譯或執行時錯誤? –
suwik
所以我將它改爲「autoMock.Create」。 當我調用sut.MethodToTest()時,我得到一個System.NullReferenceException。 resultFieldFactory(someString,secondFieldValue,thirdFieldValue) –