XUnit - Global Exception Handler

XUnit - Global Exception Handler

Olá pessoALL,

Tenho trabalhado bastante com testes de integração usando o XUnit e queria deixar uma quick tip para vocês.

Após fazer o setup do Serilog + Seq para toda a infraestrutura de testes e as APIs eu tive um erro durante a execução dos testes e fui correndo para o Seq olhar os detalhes da exception e não achei nada.

O problema ocorreu durante a fase de setup dos testes e portanto além de não esperado, não havia nenhum log definido. Para não ter que ficar colocando `try/catch` pelo código, decidi fazer um handler global para as exceptions.

No ponto central dos seus testes, geralmente uma classe que implemente IClassFixture adicione o seguinte codigo:

public AgileTestFixture()
        {
            Configuration = ConfigurationLoader.Instance.Value;
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomainOnFirstChanceException;
        }

        private void CurrentDomainOnFirstChanceException(object? sender, FirstChanceExceptionEventArgs e)
        {
            Log.Fatal(e.Exception, "Unhandled Exception");
        }

Pronto! Com o FirstChanceException agora teremos todas as exceptions dos nossos testes logados automaticamente com o SeriLog.