...
Note que o atributo do modulo "DependsOn" tem como referencia outro modulo chamado "AppModule". Este modulo é um modulo da camada de aplicação de nossa aplicação concreta a ser testada. Esse modulo também contém dependências de outras camadas como domínio e infraestrutura onde as entidades estão sendo persistidas com o Entity Framework Core.
...
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
public class CountryAppServiceTests : AppTestBase
{
private readonly ICountryAppService _countryAppService;
public CountryAppServiceTests()
{
_countryAppService = LocalIocManager.Resolve<ICountryAppService>();
}
[Fact]
public void Service_Should_Not_Be_Null()
{
_countryAppService.ShouldNotBeNull();
}
[Fact]
public async Task Create_Item_With_Sucess()
{
var result = await _countryAppService.Create(new CountryDto()
{
Id = 6,
Name = "Mexico"
});
result.Name.ShouldBe("Mexico");
}
[Fact]
public async Task Get_Return_Item_With_Sucess()
{
var result = await _countryAppService.Get(new EntityDto<int>(1));
result.Id.ShouldBe(1);
result.Name.ShouldBe("Brasil");
}
} |
...
Quando estamos trabalhando com repositórios sem o uso de um ORM por exemplo, precisamos fazer o mock da interface do repositório simulando um cenário afim de explorar todo o funcionamento do sistema.
Para isso o TNF possui uma extensão onde é possível realizar a substituição de uma injeção e usar o NSubstitute para criar objeto de mock para substitui-lo no injetor de dependência.
...
Note que o atributo do modulo "DependsOn" tem como referencia outro modulo chamado "AppModule". Este modulo é um modulo da camada de aplicação de nossa aplicação concreta a ser testada. Esse modulo também contém dependências de outras camadas como domínio e infraestrutura onde estão definidos nossos repositórios de dados.
O código exemplificado acima, carrega o modulo da camada a ser testada, configurando no método "PreInitialize" com os objetos de mock. No nosso exemplo estamos mocando Através através da função ReplaceService do TNF podemos usar usando o framework NSubstitute para então criar um objeto de mock para esse repositório e registrá-lo no container de injeção de dependência.
Para criação do Setup de cada teste o TNF disponibiliza uma classe abstrata chamada "TnfIntegratedTestBase<Module>" que recebe um TnfModule ("AppTestModule" vide exemplo anterior):
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
public class AppTestBase : TnfIntegratedTestBase<AppTestModule>
{
} |
...
Em nossos casos de teste, fazemos o mock no ultimo nível de infra estrutura, usando o NSubstitute para realizar o mock da interface IWhiteHouseRepository.
Assim temos o teste simulando toda a pilha de dependências do teste integrado. Cada teste executado no cenário acima será de forma reproduzido de forma isolada.