1

デリゲート ファクトリを介して 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
   }
 }

}

私が間違っていることについての指摘に感謝します。私は何が欠けていますか?どうすれば修正できますか?単純な構文の修正ですか、それともこのテストへの私のアプローチに何か問題がありますか?

お時間をいただきありがとうございます。

4

1 に答える 1

1

あなたの例では、autoMock.Provide()呼び出すときにファクトリ関数を渡していませんが、ファクトリ関数を呼び出して結果(IResultField)を渡しています。これを修正するには、電話してください

autoMock.Provide(funcToTriggerIResultFieldFactory);

関数を自動モック コンテナーに登録する完全な例を次に示します

于 2016-11-01T00:11:34.993 に答える