كيفية تشغيل الاختبارات باستخدام Dotnet Test في NET 10.

Ashley Goolam

Ashley Goolam

27 أغسطس 2025

كيفية تشغيل الاختبارات باستخدام Dotnet Test في NET 10.

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

مرحباً أيها مطورو .NET! هل أنتم مستعدون للارتقاء بمستوى اختباراتكم باستخدام **منصة اختبار Microsoft (MTP)** و **.NET 10**؟ إذا كنتم تستخدمون `dotnet test` مع مُشغل VSTest التقليدي، فاستعدوا—**MTP** هنا لتجعل اختباراتكم أكثر سلاسة وسرعة ومرونة. في هذا الدليل التفاعلي، سنستكشف ماهية **MTP**، المعروفة أيضاً باسم **MicrosoftTestingPlatform**، ولماذا هي خطوة متقدمة عن VSTest، وكيفية الاستفادة منها مع `dotnet test` في **.NET 10** لبناء اختبارات قوية لمشاريعكم. سأرشدكم خلال الخطوات التي اتبعتها لتجربة هذا الإعداد، من مشروع MSTest أساسي إلى حل متعدد المشاريع مع ملف تنفيذي مستقل. دعونا نغوص في عالم **MTP, MicrosoftTestingPlatform, .NET 10, dotnet test** ونجعل الاختبار أسهل وأكثر متعة!

💡
هل تريد أداة رائعة لاختبار واجهات برمجة التطبيقات (API) تولد وثائق API جميلة؟

هل تريد منصة متكاملة وشاملة لفريق المطورين لديك للعمل معاً بأقصى إنتاجية؟

Apidog يلبي جميع متطلباتك، و يحل محل Postman بسعر أكثر بأسعار معقولة!
button

لماذا يهم الاختبار في تطوير .NET؟

قبل أن نبدأ العمل، دعنا نتحدث عن سبب أهمية الاختبار. سواء كنت تبني تطبيقًا صغيرًا أو نظامًا مؤسسيًا ضخمًا، فإن الاختبارات تضمن أن يعمل الكود الخاص بك كما هو متوقع، وتكتشف الأخطاء مبكرًا، وتنقذك من جلسات تصحيح الأخطاء في وقت متأخر من الليل. تتيح لك اختبارات الوحدات الآلية، مثل تلك التي سننشئها باستخدام **MSTest** و **MTP**، التحقق من الوظائف، وتحسين جودة الكود، وتجعل إعادة الهيكلة أمرًا سهلاً. مع تحسينات الأداء في **.NET 10** وإطار الاختبار الحديث لـ **MTP**، أنت مستعد لكتابة اختبارات سريعة وموثوقة وسهلة الدمج في مسارات CI/CD. هل أنت مستعد لترى كيف؟ دعنا نتبع رحلتي!

ما هي منصة اختبار Microsoft (MTP)؟

إن **منصة اختبار Microsoft (MTP)**، أو **MicrosoftTestingPlatform**، هي الجيل التالي من إطارات عمل الاختبار من Microsoft، تم تقديمها لتحل محل مُشغل VSTest القديم. على عكس VSTest، الذي يعتمد على محولات معقدة وتنفيذ قائم على DLL، تقدم **MTP** تجربة مبسطة وأصلية لتشغيل الاختبارات في .NET. إنها مدمجة في **.NET 10**، مما يجعلها أسرع وأكثر مرونة، مع ميزات مثل مشغلات الاختبار التنفيذية المستقلة وتكامل أفضل مع `dotnet test`. تدعم **MTP** MSTest و NUnit و xUnit، وهي مصممة لسير العمل الحديث، بما في ذلك CI/CD والتطوير عبر الأنظمة الأساسية. يمكنك اعتبارها بمثابة الأخ الأكثر روعة وكفاءة لـ VSTest، مُحسّنة لتحسينات الأداء في **.NET 10**.

الخطوة 1: إعداد مشروع MSTest أساسي باستخدام MTP

دعنا نبدأ ببساطة بإنشاء مشروع MSTest أساسي لنرى **MTP** عمليًا. إليك كيف بدأت الأمور:

إنشاء المشروع:

dotnet new mstest -n MyMtpTests

التحقق من ملف المشروع:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
    <PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
  </ItemGroup>
</Project>

تشغيل الاختبارات:

cd MyMtpTests
dotnet test
vstest runner

ماذا يحدث؟ هذا إعداد تقليدي يستخدم VSTest، ولكنه أساس متين قبل الترقية إلى **MTP**. يقوم المشروع بتشغيل الاختبارات كملف DLL، وهو أمر جيد ولكنه ليس مرنًا مثل نهج **MTP** القائم على الملفات التنفيذية.

الخطوة 2: التطور إلى مُشغل اختبار MTP القائم على الملف التنفيذي

الآن، دعنا نجعل الأمور أكثر إثارة بالتحول إلى مُشغل **MTP** التنفيذي المستقل، والذي يتيح لك تشغيل الاختبارات بدون `dotnet test`. إليك كيف فعلت ذلك:

تحديث ملف المشروع:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
    <!-- Enable MTP runner and executable output -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
    <OutputType>Exe</OutputType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
    <PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
  </ItemGroup>
  <ItemGroup>
    <Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
  </ItemGroup>
</Project>

التغييرات الرئيسية:

بناء المشروع:

dotnet build
exe file generated

تشغيل الملف التنفيذي:

cd bin/Debug/net8.0
run test on .exe file

لماذا هذا رائع: النهج القائم على الملف التنفيذي مثالي لإعدادات CI/CD المخصصة أو البيئات التي لا تحتوي على .NET SDK مثبتًا. إنه يغير قواعد اللعبة من حيث المرونة، وتجعله **MTP** أسرع من VSTest عن طريق تقليل الحمل الزائد.

الخطوة 3: الاحتراف مع .NET 10 واختبار المشاريع المتعددة

لرؤية تألق **MTP** و **.NET 10** في سيناريو واقعي، دعنا نبني حلاً متعدد المشاريع مع مكتبة فئات واختبارات. إليك كيف قمت بإعداده:

هيكل المشروع النهائي:

MyMtpSolution/
│
├── MyLibrary/
│   ├── Calculator.cs
│   └── MyLibrary.csproj
│
├── MyLibrary.Tests/
│   ├── CalculatorTests.cs
│   └── MyLibrary.Tests.csproj
│
├── MyMtpSolution.sln
└── dotnet.config

1. إنشاء حل:

dotnet new sln -n MyMtpSolution

2. إنشاء مكتبة فئات:

dotnet new classlib -n MyLibrary
namespace MyLibrary
{
    public class Calculator
    {
        public int Add(int a, int b) => a + b;
        public int Subtract(int a, int b) => a - b;
        public int Multiply(int a, int b) => a * b;
        public int Divide(int a, int b) => 
            b == 0 ? throw new ArgumentException("Cannot divide by zero.") : a / b;
    }
}

3. إنشاء مشروع اختبار:

dotnet new mstest -n MyLibrary.Tests
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyLibrary;

namespace MyLibrary.Tests
{
    [TestClass]
    public class CalculatorTests
    {
        private Calculator _calculator;

        [TestInitialize]
        public void Setup()
        {
            _calculator = new Calculator();
        }

        [TestMethod]
        public void Add_ReturnsCorrectSum()
        {
            Assert.AreEqual(5, _calculator.Add(2, 3));
        }

        [TestMethod]
        public void Subtract_ReturnsCorrectDifference()
        {
            Assert.AreEqual(1, _calculator.Subtract(3, 2));
        }

        [TestMethod]
        public void Multiply_ReturnsCorrectProduct()
        {
            Assert.AreEqual(6, _calculator.Multiply(2, 3));
        }

        [TestMethod]
        public void Divide_ReturnsCorrectQuotient()
        {
            Assert.AreEqual(2, _calculator.Divide(6, 3));
        }

        [TestMethod]
        [ExpectedException(typeof(ArgumentException))]
        public void Divide_ByZero_ThrowsException()
        {
            _calculator.Divide(6, 0);
        }
    }
}

4. إضافة مراجع المشروع:

dotnet add MyLibrary.Tests reference MyLibrary

5. إضافة مشاريع إلى الحل:

dotnet sln MyMtpSolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MyMtpSolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj

6. تكوين لـ MTP:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
    <PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
  </ItemGroup>
  <ItemGroup>
    <Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
  </ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

7. الترقية إلى .NET 10:

download .net10
<TargetFramework>net10.0</TargetFramework>

8. إنشاء ملف dotnet.config:

[dotnet.test.runner]
name = "Microsoft.Testing.Platform"

9. بناء وتشغيل الاختبارات:

dotnet test
running the tests

لماذا هذا رائع: يجلب **.NET 10** تحسينات في الأداء (JIT أسرع، إدارة ذاكرة أفضل)، ويزيل التكامل الأصلي لـ **MTP** الجسور القديمة لـ VSTest، مما يجعل الاختبارات أسرع وأكثر موثوقية. يحاكي إعداد المشاريع المتعددة التطبيقات الواقعية، مع مكتبة ومشروع اختبار منفصل.

كيف يحسن .NET 10 و MTP الاختبار

تأخذ **MTP** و **.NET 10** الاختبار إلى المستوى التالي:

المستخدمون يتحدثون بحماس عن **MTP**: "إنها مثل VSTest ولكن بدون الأعباء—أسرع وأنظف!" مع **.NET 10**، تحصل على أداء متطور، وتجعل **MTP** `dotnet test` ممتعًا.

نصائح استكشاف الأخطاء وإصلاحها

الخلاصة

أنت الآن محترف في استخدام **MTP (MicrosoftTestingPlatform), .NET 10, dotnet test** لبناء إعداد اختبار حديث! من مشروع MSTest أساسي إلى حل متعدد المشاريع مع ملف تنفيذي مستقل، لقد رأيت كيف تتفوق **MTP** على VSTest وكيف يعزز **.NET 10** الأداء. حاول إضافة المزيد من الاختبارات، أو دمجها في مسار CI/CD الخاص بك، أو استكشاف الميزات المتقدمة لـ **MTP** مثل التنفيذ المتوازي. هل لديك إعدادات اختبار رائعة؟ شاركها—دعنا نحافظ على أجواء الاختبار حيوية!

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات