Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O TNF prove algumas estruturas para realização de testes em sua aplicação. Não é uma regra, mas sugerimos os seguintes frameworks para utilização em seu projeto.

Xunit.net

É um framework free, voltado a comunidade Framework open source, largamente utilizado para realizar testes na plataforma .NET. Ele suporte suporta todas as tecnologias, atualmente fazendo parte do .NET Foundation.

Para sua instalação basta realizar a adição de 2 pacotes via nuget ao seu assembly: xunitxunit.runner.visualstudio.

Referencia: https://xunit.github.io/

NSubstitute

Consiste em um framework Framework open source para realização de .NET mocking. Com ele é possível realizar mock de propriedades, classes, interfaces entre outras funcionalidades. 

Para sua utilização, basta realizar a instalação do pacote NSubstitute via interface nuget.

Referencia: http://nsubstitute.github.io/

...

Framework com estrutura de asserção. Junto com o Xunit fornece uma gama de metodos métodos de extensão para realizar os assert e validações de regras, objetos e comportamentos.

Para sua utilização, basta realizar a instalação do pacote Shouldly via interface nuget.

Referencia: https://github.com/shouldly/shouldly

...

Esse serviço realiza a validação da entidade de domínio President, utilizando o padrão de builder do TNF com o uso de specifications.

Abaixo temos a implementação do serviço WhiteHouseService usando um repositório chamado IWhiteHouseRepositoriy implementado pela camada de infraestrutura consumindo dados do Carol.

...

Caso a entidade esteja apta a ser cadastrada os dados são persistidos no repositório e um evento de criação de um presidente é disparado.

Abaixo podemos conferir a estrutura de validação da entidade através de builder para a entidade President:

Bloco de código
languagec#
firstline1
titlePresidentBuilder.cs
linenumberstrue
public class PresidentBuilder : Builder<President>
{
    public PresidentBuilder()
        : base()
    {
    }
    public PresidentBuilder(President instance)
        : base(instance)
    {
    }
    public PresidentBuilder WithId(string id)
    {
        Instance.Id = id;
        return this;
    }
    public PresidentBuilder WithName(string name)
    {
        Instance.Name = name;
        return this;
    }
    public override BuilderResponse<President> Build()
    {
        // Entity specifications
        var shouldHaveName = new PresidentShouldHaveNameSpecification();
 
        if (!shouldHaveName.IsSatisfiedBy(Instance))
        {
            var notificationMessage = LocalizationHelper.GetString(
                AppConsts.LocalizationSourceName,
                President.Error.PresidentNameMustHaveValue);
            Response.AddNotification(President.Error.PresidentNameMustHaveValue, notificationMessage);
        }
 
        return base.Build();
    }
}

Camada de aplicação

Temos dois serviços Serviços de aplicação em nosso cenário:

...

:

...

  • CountryAppService: Consumindo dados do Entity Framework Core utilizando a criação de CRUD padrão do TNF.

Abaixo podemos visualizar as interfaces de cada serviço de nosso cenário:

Bloco de código
languagec#
firstline1
titleICountryAppService.cs
linenumberstrue
public interface ICountryAppService : IAsyncCrudAppService<CountryDto>
{
}
  • WhiteHouseAppService: Consumindo dados do Carol
Bloco de código
languagec#
firstline1
titleIWhiteHouseAppService.cs
linenumberstrue
public interface IWhiteHouseAppService : IApplicationService
{
	Task<PagingDtoResponse<PresidentDto>> GetAllPresidents(GellAllPresidentsRequestDto request);
    Task<PresidentDto> GetPresidentById(string id);
    Task<DtoResponseBase<List<PresidentDto>>> InsertPresidentAsync(List<PresidentDto> dtos, bool sync = true);
    Task<DtoResponseBase> UpdatePresidentAsync(PresidentDto dto);
    Task<DtoResponseBase> DeletePresidentAsync(string id);
}

...

  • api/countries:
    • GetAll
    • Get
    • Post
    • Put
    • Delete

  • api/white-house:
    • GetAll
    • Get
    • Post
    • Put
    • Delete

Definida a estrutura de nosso cenário nos próximos tópicos vamos descrever como realizar os testes unitários e integrados.