【发布时间】:2016-12-25 05:40:47
【问题描述】:
我正在为现有的 Web API 2 项目编写单元测试。我正在为此使用Ploeh Autofixture 和Moq。
测试方法: 更新
[Test]
public async Task Service1_TestMethod() {
//some code here
var fakeemail = FakeBuilder.Create<string>("test1234@test.com");
var fakeUserInvite =
FakeBuilder.Build<UserInvite>()
.With(i => i.EmailAddress, fakeemail)
.With(i => i.Username, fakeemail)
.Create();
var fakeUserToken = FakeBuilder.Create<string>();
var fakeHttpResponseMessage =
Fixture.Build<HttpResponseMessage>()
.With(h => h.StatusCode, HttpStatusCode.OK).Create();
//Here i am mocking another service method. Whose response is HttpResponseMessage.
Service2.Setup(i => i.AddUser(fakeUserInvite, fakeUserToken))
.ReturnsAsync(fakeHttpResponseMessage);
var result = await Service1.AddUser( /* */);
}
Service1 方法:
public async Task<bool> AddUser(/* */)
{
var response = await Service2.AddUser(userInvite, userToken); // response is null even after mocking it.
// Add user code follows bassed on the above response.
}
如果我评论Service2.AddUser 电话,那么一切正常。除了这个调用之外,该方法中有很多代码。我只有这个电话有问题。如果此调用返回模拟的HttpResponseMessage,那么一切正常。
Service2 是一个外部 API。我只是想知道如何mockHttpResponseMessage。任何帮助表示赞赏。
【问题讨论】:
-
你有什么异常吗?如果是,是哪一个?
-
没有例外。对于调用
Service2.AddUser,只有response为空。我希望response成为我在setup调用时嘲笑的对象fakeHttpResponseMessage。 -
如何将
fakeUserInvite和fakeUserToken传递给Service2.AddUser方法?实际调用需要使用这些相同的对象,以便 Moq 返回您的fakeHttpResponseMessage。请参阅 Moq 文档中的 matching arguments。 -
Service2.AddUser是静态方法吗?如果没有,Service2测试替身如何传递给Service1? -
请证明minimal reproducible example,以便其他人可以重现和理解问题以提供更好的帮助。
标签: c# unit-testing asp.net-web-api2 moq autofixture