AutoFixtureを使用して、WebApiサイトのコントローラーをテストしようとしています。Ploehのブログに記載されているように、私はMoqでAutoData機能を使用しています。
私のコントローラーはコンストラクターでIDepartmentManagerを取ります。これが私のテストです:
[Theory, AutoMoqData]
public void GetCallsManagerCorrectly(
[Frozen]Mock<IDepartmentManager> departmentManagerMock,
DepartmentsController sut)
{
// Fixture setup
// Exercise system
sut.Get();
// Verify outcome
departmentManagerMock.Verify(d => d.GetAllDepartments(), Times.Exactly(1));
// Teardown
}
このテストを実行すると、次のように失敗します。
GetCallsManagerCorrectlyが失敗しました:
System.InvalidOperationException:理論Provision.Tests.WebApiControllerTests.DepartmentControllerTests.GetCallsManagerCorrectlyのデータの取得中に例外がスローされました:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.ArgumentException:「http」および「https」スキームのみが許可されます。パラメータ名:System.Net.Http.HttpRequestMessage.set_RequestUri(URI値)の値
まず第一に、これはまだこれらのテストを書くための有効で推奨される方法ですか?私はそれがすべてをどれほど小さくするかが大好きです。
次に、これを修正するにはどうすればよいですか?テストをこれに変更した場合:
[Theory, AutoMoqData]
public void GetCallsManagerCorrectly(
[Frozen]Mock<IDepartmentManager> departmentManagerMock)
{
// Fixture setup
DepartmentsController sut =
new DepartmentsController(departmentManagerMock.Object);
// Exercise system
sut.Get();
// Verify outcome
departmentManagerMock.Verify(d => d.GetAllDepartments(), Times.Exactly(1));
// Teardown
}
合格しますが、コントローラーを自動的に構築する機能が失われ、コンストラクターにパラメーターを追加しても問題ありません。