TestAvior adalah solusi ringan untuk membantu Anda mengembangkan tes perilaku untuk inti ASP.NET .
Tes perilaku adalah cara menguji fitur aplikasi Anda yang menerapkan berbagai jenis perilaku untuk mencakup skenario fungsional .
Ini memberikan pendekatan yang sederhana dan efisien untuk menulis tes otomatis untuk aplikasi inti ASP.NET Anda.
Untuk informasi lebih lanjut tentang pengujian perilaku dengan ASP.NET Core, silakan lihat di sini http://geeklearning.io/a-diferent-approach-test-test-your-asp-net-core-application-plikasinya
TestAvior menyediakan 2 perpustakaan:
Pada proyek inti ASP.NET Anda
> dotnet add package GeekLearning.Testavior.Configuration
Di proyek uji unit inti .NET Anda
> dotnet add package GeekLearning.Testavior
Lingkungan pengujian yang disediakan oleh TestaVior didasarkan pada layanan konfigurasi startup yang memungkinkan Anda memisahkan konfigurasi lingkungan produksi dari konfigurasi lingkungan pengujian . Layanan konfigurasi ini diwakili oleh kontrak IStartupConfigurationService yang menentukan 3 metode: Configure - ConfigureEnvironment - ConfigureService yang harus dipanggil dalam rutin startup untuk menyuntikkan konfigurasi tergantung lingkungan.
1 - Dalam proyek inti ASP.NET Anda:
StartupConfigurationService (ubah nama jika Anda mau) ke proyek web Anda.IStartupConfigurationService (secara opsional, warisan dari DefaultStartupConfigurationService untuk menggunakan implementasi kosong default)ConfigureServices : Menerapkan opsi konfigurasi yang spesifik untuk lingkungan produksiConfigure : Menerapkan konfigurasi middleware khusus untuk lingkungan produksiConfigureEnvironment : Implementasikan apa yang harus dieksekusi sebelum apapunMencicipi:
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 - Di kelas program Anda:
Suntikkan StartupConfigurationService Anda dengan menghubungi metode ConfigureStartup di WebHostBuilder Anda:
new WebHostBuilder ( )
.. .
. UseStartup < Startup > ( )
. ConfigureStartup < StartupConfigurationService > ( ) 3 - Di kelas Startup Anda:
IStartupConfigurationService ke dalam kelas StartupConfigureEnvironment di akhir konstruktor StartupConfigureServices di akhir metode Startup.ConfigureServices asliConfigure di awal metode Startup.Configure asliMencicipi:
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 - Dalam file proyek uji Anda:
Mesin Razor menggunakan file ketergantungan (.deps.json) untuk menyelesaikan beberapa referensi saat runtime. Jadi untuk menguji bagian MVC dari suatu aplikasi, perlu mengimpor file -file ini. Untuk melakukannya, tambahkan bagian berikut ke .csproj Anda:
< 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 - Untuk pengguna xunit
Jika Anda bermaksud menggunakan Xunit, pertama -tama ikuti dokumen resmi, lalu tambahkan file xunit.runner.json ke proyek pengujian Anda:
{
"shadowCopy" : false
} dan tambahkan bagian berikut ke .csproj Anda:
< ItemGroup >
< None Include = " xunit.runner.json " CopyToOutputDirectory = " PreserveNewest " />
</ ItemGroup > IStartupConfigurationService spesifik diperlukan untuk lingkungan pengujian jika Anda ingin menerapkan konfigurasi tes spesifik .
TestaVior hadir dengan Implementasi IStartupConfigurationService spesifik uji: TestStartupConfigurationService yang menyediakan lingkungan pengujian yang penuh dengan fitur yang berguna (lihat bagian Fitur ).
Tentu saja Anda dapat mengimplementasikan layanan konfigurasi startup Anda sendiri (dengan menggunakan Onboard TestStartupConfigurationService atau tidak).
Untuk membuat lingkungan pengujian , cukup instanciate kelas TestEnvironment dengan meneruskannya Startup aplikasi inti ASP.NET Anda, implementasi IStartupConfigurationService Anda, jenis konteks objek inti EF Anda dan jalur relatif ke proyek inti ASP.NET Anda (diperlukan untuk menyelesaikan tampilan MVC).
var testEnvironment = new TestEnvironment < Startup , TestStartupConfigurationService < [ EF_DB_CONTEXT ] > > (
Path . Combine ( System . AppContext . BaseDirectory , @"[PATH_TO_WEB_APP]" ) ) ; Tulis tes API Anda dengan hanya mengirim permintaan web menggunakan lingkungan pengujian :
[ 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 ) ;
} Tulis tes MVC hampir semudah menguji API kecuali bahwa Anda mungkin ingin menguji model yang dikembalikan oleh server dan bukan tampilan .
Untuk melakukan itu, TestaVior menyediakan repositori ViewModel yang akan mencegat dan menyimpan model tampilan yang dikembalikan oleh server.
Anda dapat mengakses repositori ini menggunakan mekanisme injeksi ketergantungan inti 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 ) ;
}Dan jangan ragu untuk melihat bagian sampel;)
Selamat Pengujian! :)