私は単体テストで自動フィクスチャを使用していますが、オートモッカーとして機能するのは素晴らしい方法です。
ただし、遅延ロードされたオブジェクトをクラスに挿入するときに問題が発生します。例えば:
public class MyClass : IMyClass
{
private Lazy<IMyInjectedClass> _myInjectedClassLazy;
private IMyInjectedClass _myInjectedClass {
get { return _myInjectedClassLazy.Value; }
}
public MyClass(Lazy<IMyInjectedClass> injectedClass)
{
_myInjectedClassLazy = _myInjectedClass;
}
public void DoSomething()
{
_myInjectedClass.DoSomething();
}
}
次に、autofixture を使用してクラスを生成するテストを実行しようとすると、次のようになります。
public class MyTests
{
[Test]
public void ShouldDoSomething()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
fixture.Behaviors.Add(new OmitOnRecursionBehavior());
var mockMyClass = fixture.Freeze<Mock<IMyClass>>();
var sut = fixture.Create<MyClass>();
sut.DoSomething();
}
}
しかし、このコードは次のエラーをスローします。
System.MissingMemberException : 遅延初期化された型には、パラメーターなしのパブリック コンストラクターがありません。
autofixture を使用するときに、このエラーを回避して遅延オブジェクトを挿入する方法はありますか?