Skip to content
Exemplo de testes de integração utilizando xUnit e .net Core
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
bin/Debug/netcoreapp2.2
obj
IntegrationTests.cs
README.md
poc-integration-tests.csproj

README.md

Testes de Integração com xUnit

O objetivo deste projeto é realizar testes de integração de APIs utilizando o xUnit. Serão cobertos cenários de :

  • Chamadas com composição;
  • Validação dos retornos;
  • ContractTest vs Test Doubles.

Conhecimentos acerca de testes unitários e sobre xUnit não serão abordados.

Chamadas com composição

O exemplo mais básico deste projeto é um teste com composição de duas APIS.

A primeira retorna uma imagem aleatório de gato, a segunda cria uma legenda para a foto;

O caráter não determinístico deste fluxo não é o ideal para o conceito de testes. O intuito aqui é apenas demonstrar a composição de duas chamadas.

[Fact]
public async void CompositionTestAsync()
{
    HttpResponseMessage image = await "https://aws.random.cat/meow".GetAsync();
    HttpResponseMessage label = await "http://yerkee.com/api/fortune".GetAsync();

    Assert.True(image.IsSuccessStatusCode);
    Assert.True(label.IsSuccessStatusCode);
}

Para tornar o código mais fluente possível, utilizamos a biblioteca Flurl para realizar as chamadas HTTP

Validação dos retornos

O próximo exemplo trata da validação dos retornos. Usamos uma abordagem utilizando retorno dinâmico do c#, para ter uma abordagem mais fortemente tipada seria necessário criar um objeto que representasse o retorno da chamada.

Considerando que o objetivo é acelerar a criação dos testes, a abordagem dinâmica é aconselhada, uma vez que precisamos preocupar apenas com os campos que serão testados, mas para realizar um teste de contrato completo, com todos os campos, a tipagem forte é aconselhada.

[Fact]
public async void ValidationTestAsync()
{
    dynamic result = await "https://openlibrary.org/api"
        .AppendPathSegment("books")
        .SetQueryParams(new { 
            bibkeys = "ISBN:0684153637", 
            jscmd = "data",
            format = "json"
        })
        .GetJsonAsync();
    var book = ((IDictionary<String, dynamic>)result)["ISBN:0684153637"];

    var title = book.title;
    var author = book.authors[0].name;

    Assert.Equal(title, "The old man and the sea");
    Assert.Equal(author, "Ernest Hemingway");
}

O teste acima utiliza uma api de livros gratuita, para pesquisar um livro a partir do seu ISBN. A partir disso valida se o título do livro e seu autor são os esperados.

You can’t perform that action at this time.