かなり基本的なテスト:
[TestClass]
public class ApiClientTest
{
private RestClient _client;
[TestInitialize()]
public virtual void TestInitialize()
{
_client = new RestClient("http://localhost:24144");
_client.CookieContainer = new System.Net.CookieContainer();
}
[TestMethod]
public void ApiClientTestCRUD()
{
// 1. Log out twice. Verify Unauthorized.
var response = LogOut();
response = LogOut();
Assert.AreEqual(response.StatusCode, HttpStatusCode.Unauthorized);
// Error here:
結果メッセージ: Assert.AreEqual が失敗しました。予想:<0>。現物:<無許可>。
<0> を取得しましたが、これは WebAPI が返すものでさえありません。
問題はRestSharpの使用にあると思います.1回デバッグすると成功し、その後の実行は成功するからです。何が起こっているのか手がかりはありますか?
明確にするために-これは、ソリューションを開いて初めてテストを実行しようとしたときに発生します。一度デバッグして、それが通過するのを見てから、必要なだけデバッグせずに実行することで修正できます。これを再現するには、VS を閉じてソリューションを再度開き、最初にデバッグせずにテストを実行します。
WebAPI の LogOut メソッドは次のとおりです。
[Authorize]
public HttpResponseMessage LogOut()
{
try
{
if (User.Identity.IsAuthenticated)
{
WebSecurity.Logout();
return Request.CreateResponse(HttpStatusCode.OK, "logged out successfully.");
}
return Request.CreateResponse(HttpStatusCode.Conflict, "already done.");
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
}
アップデート:
Trace.WriteLine を使用してテストを実行することになりました。
// 1. Log out twice. Verify Unauthorized.
Trace.WriteLine("ENTERING FIRST LOGOUT");
var response = LogOut();
Trace.WriteLine("Content: " + response.Content);
Trace.WriteLine("ErrorMessage: " + response.ErrorMessage);
Trace.WriteLine("ResponseStatus: " + response.ResponseStatus);
Trace.WriteLine("StatusCode: " + response.StatusCode);
Trace.WriteLine("StatusDescription: " + response.StatusDescription);
response = LogOut();
Trace.WriteLine("COMPLETED LOGOUTS");
Assert.AreEqual(response.StatusCode, HttpStatusCode.Unauthorized);
そして、私は次のことを見つけました:
ENTERING FIRST LOGOUT
Content:
ErrorMessage: Unable to connect to the remote server
ResponseStatus: Error
StatusCode: 0
StatusDescription:
COMPLETED LOGOUTS
私のソリューションには、この RestSharp テストを含むテスト プロジェクトと、これらの要求を受け入れることになっている WebAPI プロジェクトがあります。デバッグすると、RestClient が接続します。そうでない場合は、タイムアウトします。任意のヒント?