Silverlightユニットテストフレームワークで奇妙な問題が発生しています。実行される最初のメソッドは毎回失敗します。まったく同じコードで2番目のテストがあり、合格しました。初めて呼び出されたときの奇妙な点は、実際にタイムアウトを待ってからリポジトリ呼び出しを実行することです(気になる場合は、その下にHTTP PUTがあります)。コードは次のとおりです。最初のコードは毎回失敗し、2番目のコードは毎回合格します。
[TestMethod]
public void AuthShouldSucceed()
{
var autoResetEvent = new AutoResetEvent(false);
_authRepository.Authenticate(_username, _password, response =>
{
Assert.IsTrue(response);
autoResetEvent.Set();
});
if (!autoResetEvent.WaitOne(Constants.Timeout))
{
Assert.Fail("Test timed out.");
}
}
[TestMethod]
public void AuthShouldSucceed2()
{
var autoResetEvent = new AutoResetEvent(false);
_authRepository.Authenticate(_username, _password, response =>
{
Assert.IsTrue(response);
autoResetEvent.Set();
});
if (!autoResetEvent.WaitOne(Constants.Timeout))
{
Assert.Fail("Test timed out.");
}
}
編集: 私の最終的な解決策は、ウラジミールの解決策の修正です:
[TestMethod]
[Asynchronous]
public void AuthShouldSucceed()
{
var complete = false;
var result = false;
_authRepository.Authenticate(_username, _password, response =>
{
complete = true;
result = response;
});
EnqueueConditional(() => complete);
EnqueueCallback(() => Assert.IsTrue(result));
EnqueueTestComplete();
}