Pergunta

Eu não sei como usar o nUnit no WinRT aplicações(metro).Eu escrevo esse código e execute o teste (usando o Resharper test runner).O teste foi passado.Por quê?

using System.Threading.Tasks;
using NUnit.Framework;
namespace UnitTestInWinRT
{
    [TestFixture]
    public class NUnitClassTest
    {
        [Test]
        public void TestnUnitAsyncTest()
        {
            var number = GetNumberAsync(7);
            number.ContinueWith(n => Assert.AreEqual("string is 6", n.Result));
        }
        public Task<string> GetNumberAsync(int n)
        {
            return Task.Run(() => "string is " + n);
        }
    }
}
Foi útil?

Solução

O problema é:

Você usa ContinueWith o método.

Ceates uma continuação que é executado de forma assíncrona, quando o alvo Tarefa é concluída.

Assim, o NUnit executa o seu lamba em outro thread, e termina método de ensaio. AssertionExcecption ocorra em outro thread, que é por isso que o teste é passado.

Se você tiver executado no mesmo thread, o teste irá falhar como esperado.

[TestFixture]
public class NUnitClassTest
{
    [Test]
    public void TestnUnitAsyncTest()
    {
        var number = GetNumberAsync(7);
        number.Wait();
        Assert.AreEqual("string is 6", number.Result);
    }

    public Task<string> GetNumberAsync(int n)
    {
        return Task.Run(() => "string is " + n);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top