デリゲート ファクトリを介して 1 つのスタブ オブジェクトが渡されたときのクラスの動作をテストしようとしています。すべてのクラスの依存関係 (ファクトリを除く) がモック オブジェクトとして渡され、想定どおりに動作するバージョンのテストを作成しました。今、AutoMock を使用してコンテナにモックを自動的に作成させようとしています。
mock.Provide() を使用して、ClassUnderTest のコンストラクターでデリゲート ファクトリの具体的な値を渡す際に問題が発生しています。(このコメントが示唆するように)
私がテストしているクラス:
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
}
}
}
私が間違っていることについての指摘に感謝します。私は何が欠けていますか?どうすれば修正できますか?単純な構文の修正ですか、それともこのテストへの私のアプローチに何か問題がありますか?
お時間をいただきありがとうございます。