All*_*lly 12 c# unit-testing xunit xunit.net asp.net-web-api
我正在尝试为我的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?
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以将响应检查为一个字符串,类似于
response == "{\"Status\":0,\"SessionKey\":"1234",\"UserType\":0,\"Message\":\"Successfully authenticated.\"}"
Run Code Online (Sandbox Code Playgroud)
Ond*_*dar 16
以下是您将响应作为字符串的方式:
var responseString = response.Content.ReadAsStringAsync().Result;
Run Code Online (Sandbox Code Playgroud)
但是json格式可能会有所不同,我敢打赌你不想测试 - 所以我建议使用Newtonsoft.Json或类似的库,将字符串解析为json对象并测试json对象属性.那就行了
using Newtonsoft.Json.Linq;
dynamic jsonObject = JObject.Parse(responseString);
int status = (int)jsonObject.Status;
Assert.Equal(0, status);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20149 次 |
| 最近记录: |