O Testavior é uma solução leve para ajudá -lo a desenvolver testes de comportamento para o CORE ASP.NET .
Os testes de comportamento são uma maneira de testar os recursos do seu aplicativo, aplicando diferentes tipos de comportamentos para cobrir um cenário funcional .
Ele fornece uma abordagem simples e eficiente para escrever testes automatizados para o seu aplicativo ASP.NET Core.
Para obter mais informações sobre o teste de comportamento com o ASP.NET CORE, dê uma olhada aqui http://geeklearning.io/a-different-approach-to-test-your-asp-core-pplication
Testavior fornece 2 bibliotecas:
Em seu projeto Core ASP.NET
> dotnet add package GeekLearning.Testavior.Configuration
No seu projeto de teste de unidade principal .NET
> dotnet add package GeekLearning.Testavior
O ambiente de teste fornecido pelo Testavior é baseado em um serviço de configuração de inicialização que permite separar a configuração do ambiente de produção da configuração do ambiente de teste . Este serviço de configuração é representado por um contrato IStartupConfigurationService que define 3 métodos: Configure - ConfigureEnvironment - ConfigureService que deve ser chamado na rotina de inicialização para injetar configuração dependente do ambiente.
1 - No seu projeto Core ASP.NET :
StartupConfigurationService (altere o nome, se desejar) ao seu projeto da web.IStartupConfigurationService (Opcionalmente, herdar do DefaultStartupConfigurationService para usar a implementação vazia padrão)ConfigureServices : Implemente as opções de configuração específicas para o ambiente de produçãoConfigure : Implemente a configuração do middleware específica para o ambiente de produçãoConfigureEnvironment : implemente o que deve ser executado antes de qualquer coisaAmostra:
public class StartupConfigurationService : DefaultStartupConfigurationService
{
public override void ConfigureServices ( IServiceCollection services , IConfigurationRoot configuration )
{
base . ConfigureServices ( services , configuration ) ;
var connection = "CONNECTION_STRING" ;
services . AddDbContext < [ EF_DB_CONTEXT ] > ( options =>
options . UseSqlServer ( connection ) ) ;
}
} 2 - Na sua aula de programa :
Injete seu StartupConfigurationService , chamando o método ConfigureStartup no seu WebHostBuilder :
new WebHostBuilder ( )
.. .
. UseStartup < Startup > ( )
. ConfigureStartup < StartupConfigurationService > ( ) 3 - Na sua aula Startup :
Startup interface IStartupConfigurationServiceConfigureEnvironment no final do construtor StartupConfigureServices no final do método original Startup.ConfigureServicesConfigure no início do método original Startup.ConfigureAmostra:
public class Startup
{
private IStartupConfigurationService externalStartupConfiguration ;
public Startup ( IHostingEnvironment env , IStartupConfigurationService externalStartupConfiguration = null )
{
this . externalStartupConfiguration = externalStartupConfiguration ;
this . externalStartupConfiguration . ConfigureEnvironment ( env ) ;
}
public void ConfigureServices ( IServiceCollection services )
{
services . AddMvc ( )
// Pass configuration (IConfigurationRoot) to the configuration service if needed
this . externalStartupConfiguration . ConfigureServices ( services , null ) ;
}
public void Configure ( IApplicationBuilder app , IHostingEnvironment env , ILoggerFactory loggerFactory )
{
this . externalStartupConfiguration . Configure ( app , env , loggerFactory ) ;
app . UseMvc ( ) ;
}
} 4 - No seu arquivo de projeto de teste:
O motor de barbear usa arquivos de dependência (.Deps.json) para resolver algumas referências no tempo de execução. Portanto, para testar a parte do MVC de um aplicativo, é necessário importar esses arquivos. Para fazer isso, adicione a seção a seguir ao seu .csproj :
< Target Name = " CopyDepsFiles " AfterTargets = " Build " Condition = " '$(TargetFramework)'!='' " >
< ItemGroup >
< DepsFilePaths Include = " $([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json')) " />
</ ItemGroup >
< Copy SourceFiles = " %(DepsFilePaths.FullPath) " DestinationFolder = " $(OutputPath) " Condition = " Exists('%(DepsFilePaths.FullPath)') " />
</ Target > 5 - para usuários Xunit
Se você pretende usar o Xunit, siga primeiro o documento oficial e adicione um arquivo xunit.runner.json ao seu projeto de teste:
{
"shadowCopy" : false
} e adicione a seção a seguir ao seu .csproj :
< ItemGroup >
< None Include = " xunit.runner.json " CopyToOutputDirectory = " PreserveNewest " />
</ ItemGroup > É necessário um serviço específico IStartupConfigurationService para o ambiente de teste , se você deseja implementar a configuração específica do teste .
O Testavior vem com um teste específico IStartupConfigurationService IMPLEMPENSATIVA: TestStartupConfigurationService , que fornece um ambiente de teste cheio de recursos úteis (consulte a seção Recursos ).
Obviamente, você pode implementar seu próprio serviço de configuração de inicialização (usando o TestStartupConfigurationService a bordo ou não).
Para criar um ambiente de teste , basta inserir a classe TestEnvironment , passando por sua Startup de aplicativos ASP.NET Core, sua implementação IStartupConfigurationService PROJETAMENTE, o tipo de sua EF Core ObjectContext e o caminho relativo para o seu projeto CORE ASP.NET (para resolver as visualizações do MVC).
var testEnvironment = new TestEnvironment < Startup , TestStartupConfigurationService < [ EF_DB_CONTEXT ] > > (
Path . Combine ( System . AppContext . BaseDirectory , @"[PATH_TO_WEB_APP]" ) ) ; Escreva seu teste de API apenas enviando solicitações da Web usando o ambiente de teste :
[ TestMethod ]
public void ScenarioShouldBeOk ( )
{
var testEnvironment = new TestEnvironment < Startup , TestStartupConfigurationService < [ EF_DB_CONTEXT ] > > (
Path . Combine ( System . AppContext . BaseDirectory , @"[PATH_TO_WEB_APP]" ) ) ;
var response = testEnvironment . Client . GetAsync ( "/api/data" ) . Result ;
response . EnsureSuccessStatusCode ( ) ;
// Test result content
var result = JsonConvert . DeserializeObject < Data [ ] > ( response . Content . ReadAsStringAsync ( ) . Result ) ;
Assert . AreEqual ( "data" , result . Data ) ;
} Escreva um teste de MVC é quase tão fácil quanto testar uma API, exceto que você pode querer testar o modelo retornado pelo servidor e não pela visualização .
Para fazer isso, o Testavior fornece um repositório ViewModel que interceptará e armazenará os modelos da exibição retornados pelo servidor.
Você pode acessar este repositório usando o mecanismo de injeção de dependência do núcleo do ASP.NET:
[ TestMethod ]
public void ScenarioShouldBeOk ( )
{
var testEnvironment = new TestEnvironment < Startup , TestStartupConfigurationService < [ EF_DB_CONTEXT ] > > (
Path . Combine ( System . AppContext . BaseDirectory , @"[PATH_TO_WEB_APP]" ) ) ;
testEnvironment . Client . GetAsync ( "/" ) . Result . EnsureSuccessStatusCode ( ) ;
var viewModel = testEnvironment
. ServiceProvider
. GetRequiredService < ViewModelRepository > ( )
. Get < [ VIEWMODEL_TYPE ] > ( ) ;
Assert . AreEqual ( "data" , viewModel . Data ) ;
}E fique à vontade para dar uma olhada na seção de amostras;)
Teste feliz! :)