AutoFixture.AutoMoq パッケージで AutoFixture を使用すると、テスト対象を正しくテストするように構成されていないテストが見つかることがありますが、デフォルトの (Loose) Mock 動作のために問題が発見されることはありませんでした。
public interface IService
{
bool IsSomethingTrue(int id);
}
void Main()
{
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var service = fixture.Freeze<Mock<IService>>();
Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
モックを Strict 動作で作成したいので、Setup()
呼び出されると予想されるメソッドを呼び出さなければなりません。次のように、個々のモックごとにこれを行うことができます。
fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
しかし、AutoMoqCustomization() およびさまざまなISpecimenBuilder
実装のソース コードをくまなく調べた後、すべてのモックを厳密な動作で初期化するための最善の方法についてかなり迷っています。このフレームワークは非常に柔軟で拡張可能であるように見えるので、これを行う簡単な方法があると確信していますが、方法がわかりません。