单元测试时,我想检查 csv 格式的结果,所以我的测试中有以下代码。
MyDtoReq request = new MyDtoReq();
// ... assign some properties
string url = request.ToUrl("GET");
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);
httpReq.Accept = "text/csv";
csv = new StreamReader(httpReq.GetResponse().GetResponseStream()).ReadToEnd();
如果请求成功,那效果很好。但是当它失败时,它会引发一个System.Net.WebException
没有预期WebServiceException.ResponseStatus
细节的问题。NUnit 报告异常如下:
Test Name: TestReq
Test FullName: [...].TestReq
Test Source: c:\Users\[...]\UnitTestProject1\ServiceTests.cs : line 261
Test Outcome: Failed
Test Duration: 0:00:27.104
Result Message: System.Net.WebException : The remote server returned an error: (400) Bad Request.
Result StackTrace: at [...].TestReq() in c:\Users\[...]\UnitTestProject1\ServiceTests.cs:line 287
事实证明这是设计使然,因为大多数请求 csv 格式的客户端都无法解析ResponseStatus
. 为了查看实际错误,我会在浏览器中使用 format=html 重新提交请求 - 令人沮丧的浪费时间。