Testavior هو حل خفيف الوزن لمساعدتك في تطوير اختبارات السلوك لـ ASP.NET Core .
اختبارات السلوك هي وسيلة لاختبار ميزات التطبيق الخاصة بك لتطبيق أنواع مختلفة من السلوكيات لتغطية سيناريو وظيفي .
يوفر نهجًا بسيطًا وفعالًا لكتابة الاختبارات الآلية لتطبيق ASP.NET Core الخاص بك.
لمزيد من المعلومات حول اختبار السلوك مع ASP.NET Core ، يرجى إلقاء نظرة هنا http://geeklearning.io/a-different-approach-test-your-app-net-ed-application
يوفر Testavior مكتبتين:
في مشروع ASP.NET Core الخاص بك
> dotnet add package GeekLearning.Testavior.Configuration
في مشروع اختبار الوحدة الأساسية .NET
> 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.ConfigureServices الأصلي.Configure في بداية طريقة 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 - في ملف مشروع الاختبار الخاص بك:
يستخدم محرك Razor ملفات التبعية (.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 الذي يوفر بيئة اختبار مليئة بالميزات المفيدة (انظر قسم الميزات ).
بالطبع يمكنك تنفيذ خدمة تكوين بدء التشغيل الخاصة بك (باستخدام onboard TestStartupConfigurationService أم لا).
لإنشاء بيئة اختبار ، ما عليك سوى تشغيل فئة TestEnvironment من خلال تمريرها Startup ASP.NET Core Application ، وتطبيق 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 سهلًا تقريبًا مثل اختبار واجهة برمجة التطبيقات باستثناء أنك قد ترغب في اختبار النموذج الذي تم إرجاعه بواسطة الخادم وليس العرض .
للقيام بذلك ، يوفر Testavior مستودع ViewModel الذي سيعترض وتخزين نماذج العرض التي يتم إرجاعها بواسطة الخادم.
يمكنك الوصول إلى هذا المستودع باستخدام آلية حقن التبعية Core 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 ) ;
}لا تتردد في إلقاء نظرة على قسم العينات ؛)
اختبار سعيد! سائدا