Testavior - это легкое решение, которое поможет вам разработать поведенческие тесты для ASP.NET Core .
Тесты поведения - это способ тестирования функций приложения, применяя различные типы поведения для охвата функционального сценария .
Он обеспечивает простой и эффективный подход для написания автоматических тестов для вашего основного приложения ASP.NET.
Для получения дополнительной информации о тестировании поведения с помощью ASP.NET Core, пожалуйста, посмотрите здесь http://geeklearning.io/a-different-praics-to-test-your-asp-net-core-application
Testavior предоставляет 2 библиотеки:
На вашем основном проекте ASP.NET
> dotnet add package GeekLearning.Testavior.Configuration
На вашем проекте .NET CORE UNIT TEST
> dotnet add package GeekLearning.Testavior
Тестовая среда, предоставленная Testavior , основана на службе конфигурации запуска , которая позволяет вам отделить конфигурацию производственной среды от конфигурации тестовой среды. Эта служба конфигурации представлена контрактной IStartupConfigurationService , который определяет 3 метода: Configure - ConfigureEnvironment - ConfigureService , который необходимо вызвать в рамках подпрограммы запуска в зависимость от окружающей среды.
1 - В вашем основном проекте ASP.NET :
StartupConfigurationService (измените имя, если вы хотите) в свой веб -проект.IStartupConfigurationService (необязательно, наследуйте от DefaultStartupConfigurationService для использования пустой реализации по умолчанию)ConfigureServices : реализуйте параметры конфигурации, которые относятся к производственной средеConfigure : Реализация конфигурации промежуточного программного обеспечения, специфичная для производственной средыConfigureEnvironment : реализуйте то, что должно быть выполнено, прежде чем что -либоОбразец:
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 - В вашем программном классе:
Введите свой StartupConfigurationService , вызывая метод ConfigureStartup на вашем WebHostBuilder :
new WebHostBuilder ( )
.. .
. UseStartup < Startup > ( )
. ConfigureStartup < StartupConfigurationService > ( ) 3 - В вашем классе Startup :
IStartupConfigurationService в класс StartupConfigureEnvironment в конце конструктора StartupConfigureServices в конце исходного метода Startup.ConfigureServicesConfigure в начале исходного метода Startup.ConfigureОбразец:
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 - В файле вашего тестового проекта:
Двигатель бритвы использует файлы зависимостей (.deps.json) для разрешения некоторых ссылок во время выполнения. Таким образом, чтобы проверить часть приложения MVC , необходимо импортировать эти файлы. Чтобы сделать это, добавьте следующий раздел в свой .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 - для пользователей XUNIT
Если вы собираетесь использовать XUNIT, сначала следуйте официальному документу, добавьте файл xunit.runner.json в свой тестовый проект:
{
"shadowCopy" : false
} и добавьте следующий раздел в свой .csproj :
< ItemGroup >
< None Include = " xunit.runner.json " CopyToOutputDirectory = " PreserveNewest " />
</ ItemGroup > Для тестовой среды требуется конкретный IStartupConfigurationService , если вы хотите реализовать конкретную тестовую конфигурацию.
Testavior поставляется с специфическим тестом IStartupConfigurationService Реализация: TestStartupConfigurationService , которая обеспечивает тестовую среду, полную полезных функций (см. Раздел функций ).
Конечно, вы можете реализовать свою собственную службу конфигурации запуска (с помощью встроенной TestStartupConfigurationService или нет).
Чтобы создать тестовую среду , просто информируйте класс TestEnvironment , передавая его Startup основного приложения ASP.NET, вашу реализацию IStartupConfigurationService , тип вашего EF Core ObjectContext и относительный путь к вашему основному проекту ASP.NET (необходимо для разрешения просмотров MVC).
var testEnvironment = new TestEnvironment < Startup , TestStartupConfigurationService < [ EF_DB_CONTEXT ] > > (
Path . Combine ( System . AppContext . BaseDirectory , @"[PATH_TO_WEB_APP]" ) ) ; Напишите свой тест API, просто отправив веб -запросы, используя тестовую среду :
[ 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 ) ;
} Напишите тест MVC почти так же прост, как тестирование API, за исключением того, что вы, возможно, захотите протестировать модель , возвращаемую сервером, а не представление .
Для этого Testavior предоставляет репозиторий ViewModel , который будет перехватывать и хранить модели представления, возвращаемые сервером.
Вы можете получить доступ к этому репозиторию, используя механизм инъекции зависимостей 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 ) ;
}И не стесняйтесь взглянуть на раздел образцов;)
Счастливого тестирования! :)