我正在使用Xunit和Moq编写一个单元测试,针对ServiceStack微服务进行测试。
我可以成功地对一个类的GET路由进行单元测试,但是对于另一个类,测试失败了。在这个路由中,我使用Moq对ServiceStack.JsonHttpClient.GET进行模拟。
我可以成功地对一个类的GET路由进行单元测试,但是对于另一个类,测试失败了。在这个路由中,我使用Moq对ServiceStack.JsonHttpClient.GET进行模拟。
public SampleResponse Get(SampleRequest request)
{
var myServiceRequest = new SampleService.myRequest() { PrimaryId = request.PrimaryId };
using (client = ClientFactory.CreateSampleService()) // client is extension of ServiceStack.JsonHttpClient
{
// This code runs on local but throws the exception with unit testing
SampleService.myResponse myResponse = client.Get(myServiceRequest);
...
}
}
以下是测试内容:
// Arrange
var myServiceRequest = new SampleService.myRequest { PrimaryId = 1234 };
var myServiceResponse = new SampleService.myResponse { ... };
// assigning the request with the desired response
mockService.MockGet(myServiceRequest, myServiceResponse);
// Act
var request = new ServiceModel.SampleRequest { PrimaryId = 1234 };
// This calls the above function and fails
var response = frontEndService.Get(request);
// Assert
Assert.NotEmpty(response.Items);
Assert.Equal(3, response.Items.ANumber);
但是我得到了这个异常和内部异常:
ServiceStack.WebException: '未找到'
内部异常
SerializationException:类型定义应该以'{'开头,期望序列化类型“ ErrorResponse”,而得到的是以MOCK FOR URL NOT FOUND开头的字符串。
我几乎为一个更简单的类设置了完全相同的内容,并且它运行正常,但是这个类拒绝进行正确的单元测试。当本地运行时,它确实可以正常运行。
frontEndService
是你的服务类,对吧?所以frontEndService.Get()
只是一个直接调用的方法,你可以进行调试。这里只是在调用 C# 方法。我也没有看到任何序列化操作,因为你只是传递了一个类型化的请求 DTO 并返回了一个类型化的响应 DTO。你的服务是否正在进行 HTTP 调用或执行任何序列化操作?如果是的话,那可能就是问题所在了。 - mythz