Teste assíncrono xUnit não está funcionando corretamente

Temos usado o xUnit Framework em nosso projeto como estrutura de teste desde o início. Atualmente, existem mais de 2200 testes de unidade no projeto e tudo parece bem.

Mas ontem eu decidi executar testes de unidade nas compilações CI e noturnas. Lutando com o time build controller para executar testes de unidade por 1-2 horas, consigo executar testes. Mas houve um problema, existem 22 avisos sobre testes como abaixo, - Xunit.Sdk.EqualException: Falha de Assert.Equal () ou - System.ArgumentNullException: Value não pode ser nulo.

Depois de mais algumas pesquisas, percebi que esses testes precisavam falhar, mas parece ter passado porque todos esses testes estão marcados com a palavra-chave "async".

Na verdade, não deve haver nenhum erro, porque o xUnit suporta testes assíncronos em relação a essas postagenshttp://bradwilson.typepad.com/blog/2012/01/xunit19.html http://sravi-kiran.blogspot.com.tr/2012/11/UnitTestingAsynchronousMethodsUsingMSTestAndXUnit.html A realidade de Howerver é uma diferença menor para mim. Sim O xUnit é executado sem nenhum problema, mas não é testado corretamente.

Aqui estão dois pequenos métodos.

public async Task<string> AsyncTestMethod() {
    throw new Exception("Test");
}
public string NormalTestMethod() {
    throw new Exception("Test");
}

Como você pode ver apenas a diferença, o primeiro método definido como "assíncrono" E aqui estão dois testes para esses métodos.

  [Fact]
    public async void XunitTestMethod_Async() {
        Program p = new Program();
        string result = await p.AsyncTestMethod();
        Assert.Equal("Ok", result);
    }
        [Fact]
    public  void XunitTestMethod_Normal() {
        Program p = new Program();
        string result =  p.NormalTestMethod();
        Assert.Equal("Ok", result);
    }

Ambos os métodos originais lançam exceção, então acho que ambos os testes devem falhar, mas o resultado é diferente. Você pode ver os resultados:

O teste de XunitTestMethod_Async passou, mas o XunitTestMethod_Normal falha. Lançar uma exceção não é o caso, você pode alterar o conteúdo do método como desejar que o AsyncTestMethod sempre passe.

Aqui está o exemplo de solução:https://github.com/bahadirarslan/AsyncTestWithxUnit

Posso entender mal ou pensar errado, mas agora esse comportamento causa muita dor para mim

Espero que você possa me esclarecer.

PS: Eu criei um problema na página do xUnit no github, mas não tinha certeza se isso foi causado por mim ou pelo xUnit. Então eu decidi perguntar aqui também. Questão:https://github.com/xunit/xunit/issues/96

questionAnswers(1)

yourAnswerToTheQuestion