Asynchrone Silverlight-Komponententests

Ich habe ein seltsames Problem mit dem Silverlight Unit Test Framework. Die allererste ausgeführte Methode schlägt jedes Mal fehl. Ich habe einen zweiten Test mit genau dem gleichen Code, und es besteht. Das Merkwürdige am ersten Aufruf ist, dass es tatsächlich auf das Timeout wartetund dann Führt den Repository-Aufruf aus (darunter befindet sich ein HTTP-PUT, falls Sie dies möchten). Hier ist der Code - der erste schlägt jedes Mal fehl, der zweite passiert jedes Mal:

    [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.");
        } 
    }

Bearbeiten: Meine endgültige Lösung ist eine Modifikation von Vladmirs Lösung:

    [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();
    }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage