我正在使用AutoFixture嘗試測試我的控制器的WebApi網站。我正在使用Moq的AutoData功能,如Ploeh's blog所述。Autofixture和WebApi控制器
我的控制器在構造函數中需要一個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
}
它通過,但後來我失去了讓控制器自動建立起來,仍然是確定的,如果我添加參數構造函數的能力。
感謝您的快速和正確的迴應。很棒。 –
@BrianMcCord和其他人很確定上面的'HttpSchemeCustomization'現在是AF V3 +中的固有功能。 –