我正在尝试为我的web API设置单元测试。我从网上找到的零碎代码中拼凑了一些测试代码。我已经完成了发送测试请求并接收响应的工作,但是我被困在测试响应上。
这就是我到目前为止所得到的。这是在使用xunit测试包,但我认为这对我要实现的目标并不重要。
(对代码的混杂表示歉意)
[Fact]
public void CreateOrderTest()
{
string baseAddress = "http://dummyname/";
// Server
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute("Default", "api/{controller}/{action}/{id}",
new { id = RouteParameter.Optional });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
HttpServer server = new HttpServer(config);
// Client
HttpMessageInvoker messageInvoker = new HttpMessageInvoker(new InMemoryHttpContentSerializationHandler(server));
// Order to be created
MotorInspectionAPI.Controllers.AccountController.AuthenticateRequest requestOrder = new MotorInspectionAPI.Controllers.AccountController.AuthenticateRequest() {
Username = "Test",
Password = "password"
};
HttpRequestMessage request = new HttpRequestMessage();
request.Content = new ObjectContent<MotorInspectionAPI.Controllers.AccountController.AuthenticateRequest>(requestOrder, new JsonMediaTypeFormatter());
request.RequestUri = new Uri(baseAddress + "api/Account/Authenticate");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Method = HttpMethod.Get;
CancellationTokenSource cts = new CancellationTokenSource();
using (HttpResponseMessage response = messageInvoker.SendAsync(request, cts.Token).Result)
{
Assert.NotNull(response.Content);
Assert.NotNull(response.Content.Headers.ContentType);
// How do I test that I received the correct response?
}我希望我可以将响应检查为字符串,类似于
response == "{\"Status\":0,\"SessionKey\":"1234",\"UserType\":0,\"Message\":\"Successfully authenticated.\"}"发布于 2014-10-03 05:28:07
按照this blog,在web项目的AssemblyInfo.cs中添加一个程序集引用:
[assembly: InternalsVisibleTo("MyNamespace.Tests")]然后,您可以像预期的那样使用普通对象进行测试,只是不能用"var“替换"dynamic”类型:
namespace MyNamespace.Tests
// some code
private string TheJsonMessage()
{
dynamic data = _json.Data;
return data.message;
}我花了四个小时才找到那颗小宝石。
https://stackoverflow.com/questions/21550057
复制相似问题