Chào các nhà phát triển .NET! Sẵn sàng nâng tầm trò chơi kiểm thử của bạn với Microsoft Testing Platform (MTP) và .NET 10 chưa? Nếu bạn đã và đang sử dụng dotnet test
với trình chạy VSTest truyền thống, hãy chuẩn bị tinh thần—MTP có mặt ở đây để giúp việc kiểm thử của bạn mượt mà hơn, nhanh hơn và linh hoạt hơn. Trong hướng dẫn thân mật này, chúng ta sẽ khám phá MTP, hay còn gọi là MicrosoftTestingPlatform, là gì, tại sao nó là một bước tiến so với VSTest, và cách khai thác nó với dotnet test trong .NET 10 để xây dựng các bài kiểm thử mạnh mẽ cho dự án của bạn. Tôi sẽ hướng dẫn bạn từng bước mà tôi đã thực hiện để thử nghiệm với thiết lập này, từ một dự án MSTest cơ bản đến một giải pháp đa dự án với một tệp thực thi độc lập. Hãy cùng đi sâu vào thế giới của MTP, MicrosoftTestingPlatform, .NET 10, dotnet test và làm cho việc kiểm thử trở nên dễ dàng và thú vị hơn!
Bạn muốn một nền tảng tích hợp, tất cả trong một để Đội ngũ Phát triển của bạn làm việc cùng nhau với năng suất tối đa?
Apidog đáp ứng mọi yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều!
Tại Sao Kiểm Thử Lại Quan Trọng Trong Phát Triển .NET
Trước khi bắt tay vào thực hành, hãy cùng nói về lý do tại sao kiểm thử lại là một vấn đề lớn. Cho dù bạn đang xây dựng một ứng dụng nhỏ hay một hệ thống doanh nghiệp khổng lồ, các bài kiểm thử đảm bảo mã của bạn hoạt động như mong đợi, bắt lỗi sớm và giúp bạn tránh khỏi những buổi debug thâu đêm. Các bài kiểm thử đơn vị tự động, như những gì chúng ta sẽ tạo với MSTest và MTP, cho phép bạn xác minh chức năng, cải thiện chất lượng mã và giúp việc tái cấu trúc trở nên dễ dàng. Với các cải tiến hiệu suất của .NET 10 và khung kiểm thử hiện đại của MTP, bạn đã sẵn sàng viết các bài kiểm thử nhanh chóng, đáng tin cậy và dễ dàng tích hợp vào các pipeline CI/CD. Sẵn sàng để xem cách thực hiện chưa? Hãy cùng theo dõi hành trình của tôi!
Microsoft Testing Platform (MTP) Là Gì?
Microsoft Testing Platform (MTP), hay MicrosoftTestingPlatform, là khung kiểm thử thế hệ tiếp theo của Microsoft, được giới thiệu để thay thế trình chạy VSTest đã lỗi thời. Không giống như VSTest, vốn dựa vào các bộ điều hợp phức tạp và việc thực thi dựa trên DLL, MTP mang đến trải nghiệm gốc, được sắp xếp hợp lý để chạy các bài kiểm thử trong .NET. Nó được tích hợp sẵn trong .NET 10, giúp nó nhanh hơn và linh hoạt hơn, với các tính năng như trình chạy kiểm thử tệp thực thi độc lập và tích hợp tốt hơn với dotnet test
. MTP hỗ trợ MSTest, NUnit và xUnit, và nó được thiết kế cho các quy trình làm việc hiện đại, bao gồm CI/CD và phát triển đa nền tảng. Bạn có thể coi nó là người anh em 'ngầu' hơn, hiệu quả hơn của VSTest, được tối ưu hóa cho các cải tiến hiệu suất của .NET 10.
Bước 1: Thiết Lập Một Dự Án MSTest Cơ Bản Với MTP
Hãy bắt đầu đơn giản bằng cách tạo một dự án MSTest cơ bản để xem MTP hoạt động. Đây là cách tôi khởi động mọi thứ:
Tạo Dự Án:
- Mở terminal của bạn và tạo một dự án MSTest mới bằng .NET CLI:
dotnet new mstest -n MyMtpTests
- Thao tác này tạo một thư mục dự án
MyMtpTests
với một tệp kiểm thử mặc định (UnitTest1.cs
) và một tệp.csproj
.
Kiểm Tra Tệp Dự Án:
- Tệp
MyMtpTests.csproj
được tạo ra trông giống như thế này:
<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>
- Thiết lập này tạo một dự án MSTest tiêu chuẩn với VSTest, sử dụng Coverlet để đo độ bao phủ mã và Microsoft.NET.Test.Sdk để thực thi kiểm thử.
Chạy Các Bài Kiểm Thử:
- Điều hướng đến thư mục dự án:
cd MyMtpTests
- Chạy bài kiểm thử mặc định:
dotnet test
- Trình chạy VSTest thực thi bài kiểm thử mẫu trong
UnitTest1.cs
, và bạn sẽ thấy đầu ra xác nhận bài kiểm thử đã vượt qua, cùng với thống kê độ bao phủ từ Coverlet.

Điều Gì Đang Xảy Ra? Đây là một thiết lập truyền thống sử dụng VSTest, nhưng nó là một nền tảng vững chắc trước khi chúng ta nâng cấp lên MTP. Dự án chạy các bài kiểm thử dưới dạng DLL, điều này không sao nhưng không linh hoạt bằng cách tiếp cận tệp thực thi của MTP.
Bước 2: Phát Triển Sang Trình Chạy Kiểm Thử Dựa Trên Tệp Thực Thi Của MTP
Bây giờ, hãy làm cho mọi thứ thú vị hơn bằng cách chuyển sang trình chạy tệp thực thi độc lập của MTP, cho phép bạn chạy các bài kiểm thử mà không cần dotnet test
. Đây là cách tôi đã làm:
Cập Nhật Tệp Dự Án:
- Sửa đổi
MyMtpTests.csproj
để bật MTP và tạo một tệp thực thi:
<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>
Các thay đổi chính:
<EnableMSTestRunner>true</EnableMSTestRunner>
: Kích hoạt trình chạy kiểm thử của MTP.<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
: Đảm bảo khả năng tương thích vớidotnet test
.<OutputType>Exe</OutputType>
: Xuất ra một tệp thực thi độc lập thay vì một DLL.
Xây Dựng Dự Án:
- Chạy:
dotnet build
- Thao tác này tạo ra một tệp thực thi (ví dụ:
MyMtpTests.exe
) trong thư mụcbin/Debug/net8.0
.

Chạy Tệp Thực Thi:
- Điều hướng đến thư mục đầu ra:
cd bin/Debug/net8.0
- Chạy tệp thực thi:
- Windows:
MyMtpTests.exe
- macOS/Linux:
./MyMtpTests
- Các bài kiểm thử chạy như một ứng dụng console độc lập, không cần
dotnet test
!

Tại Sao Điều Này Tuyệt Vời: Cách tiếp cận tệp thực thi hoàn hảo cho các thiết lập CI/CD tùy chỉnh hoặc môi trường không cài đặt .NET SDK. Nó là một yếu tố thay đổi cuộc chơi về tính linh hoạt, và MTP làm cho nó nhanh hơn VSTest bằng cách giảm chi phí chung.
Bước 3: Nâng Tầm Với .NET 10 Và Kiểm Thử Đa Dự Án
Để thấy MTP và .NET 10 tỏa sáng trong một kịch bản thực tế, hãy cùng xây dựng một giải pháp đa dự án với một thư viện lớp và các bài kiểm thử. Đây là cách tôi đã thiết lập nó:
Cấu trúc dự án cuối cùng:
MyMtpSolution/
│
├── MyLibrary/
│ ├── Calculator.cs
│ └── MyLibrary.csproj
│
├── MyLibrary.Tests/
│ ├── CalculatorTests.cs
│ └── MyLibrary.Tests.csproj
│
├── MyMtpSolution.sln
└── dotnet.config
1. Tạo một Solution:
- Bắt đầu mới với một solution:
dotnet new sln -n MyMtpSolution
2. Tạo một Thư viện Lớp:
- Thêm một dự án thư viện lớp:
dotnet new classlib -n MyLibrary
- Triển khai một lớp
Calculator
trongMyLibrary/Calculator.cs
:
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. Tạo một Dự án Kiểm thử:
- Tạo một dự án MSTest:
dotnet new mstest -n MyLibrary.Tests
- Thêm các bài kiểm thử trong
MyLibrary.Tests/UnitTest1.cs
:
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. Thêm Tham chiếu Dự án:
- Liên kết dự án kiểm thử với thư viện:
dotnet add MyLibrary.Tests reference MyLibrary
5. Thêm Dự án vào Solution:
- Bao gồm cả hai dự án vào solution:
dotnet sln MyMtpSolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MyMtpSolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj
6. Cấu hình cho MTP:
- Cập nhật
MyLibrary.Tests.csproj
để bật 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>
- Tùy chọn, cập nhật
MyLibrary.csproj
để nhất quán (mặc dù không thực sự cần thiết):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
7. Nâng cấp lên .NET 10:
- Tải xuống .NET 10 SDK từ dotnet.microsoft.com (đảm bảo nó tương thích với hệ điều hành của bạn—Windows, macOS, hoặc Linux).

- Cập nhật cả hai tệp
.csproj
để nhắm mục tiêu .NET 10:
<TargetFramework>net10.0</TargetFramework>
8. Tạo một tệp dotnet.config:
- Trong thư mục gốc của solution, tạo
dotnet.config
với nội dung:
[dotnet.test.runner]
name = "Microsoft.Testing.Platform"
- Điều này cho phép tích hợp gốc của MTP với
dotnet test
trong .NET 10.
9. Xây dựng và Chạy Kiểm thử:
- Từ thư mục gốc của solution:
dotnet test
- MTP chạy các bài kiểm thử, tận dụng các tối ưu hóa của .NET 10. Bạn sẽ thấy đầu ra cho tất cả các bài kiểm thử, bao gồm trạng thái vượt qua/thất bại và thống kê độ bao phủ.

Tại Sao Điều Này Tuyệt Vời: .NET 10 mang lại các cải thiện hiệu suất (JIT nhanh hơn, quản lý bộ nhớ tốt hơn), và tích hợp gốc của MTP loại bỏ các cầu nối cũ của VSTest, làm cho các bài kiểm thử nhanh hơn và đáng tin cậy hơn. Thiết lập đa dự án mô phỏng các ứng dụng thực tế, với một thư viện và dự án kiểm thử riêng biệt.
Cách .NET 10 Và MTP Cải Thiện Việc Kiểm Thử
MTP và .NET 10 đưa việc kiểm thử lên một tầm cao mới:
- Tốc độ: Trình chạy gốc của MTP được tối ưu hóa cho .NET 10, giảm thời gian khởi động so với VSTest.
- Tính linh hoạt: Các tệp thực thi độc lập giúp các bài kiểm thử có thể di chuyển, lý tưởng cho CI/CD tùy chỉnh hoặc môi trường container.
- Khả năng mở rộng: Hỗ trợ đa dự án xử lý các giải pháp phức tạp, với MTP đảm bảo việc thực thi kiểm thử nhất quán.
- Các tính năng hiện đại: Biên dịch AOT và tối ưu hóa bộ nhớ của .NET 10 làm cho các bài kiểm thử chạy nhanh hơn, trong khi MTP hỗ trợ các tính năng nâng cao như thực thi kiểm thử song song và trình báo cáo tùy chỉnh.
Người dùng đang rất hào hứng về MTP: “Nó giống như VSTest nhưng không có gánh nặng—nhanh hơn và sạch hơn!” Với .NET 10, bạn có được hiệu suất tiên tiến, và MTP biến dotnet test
thành một niềm vui.
Mẹo Khắc Phục Sự Cố
- Kiểm thử Không Chạy? Đảm bảo .NET 10 SDK đã được cài đặt và
TargetFramework
được đặt thànhnet10.0
. - MTP Chưa Được Bật? Kiểm tra xem
EnableMSTestRunner
vàTestingPlatformDotnetTestSupport
có trong tệp.csproj
hoặcdotnet.config
không. - Thiếu Độ Bao Phủ? Xác minh
coverlet.collector
đã được bao gồm và chạydotnet test --collect:"XPlat Code Coverage"
. - Tệp Thực thi Bị Lỗi? Đảm bảo
OutputType
làExe
và chạydotnet build
trước khi thực thi tệp.exe
.
Kết Luận
Giờ đây bạn đã là một chuyên gia trong việc sử dụng MTP (MicrosoftTestingPlatform), .NET 10, dotnet test để xây dựng một thiết lập kiểm thử hiện đại! Từ một dự án MSTest cơ bản đến một giải pháp đa dự án với một tệp thực thi độc lập, bạn đã thấy cách MTP vượt trội hơn VSTest và cách .NET 10 tăng cường hiệu suất. Hãy thử thêm nhiều bài kiểm thử hơn, tích hợp vào pipeline CI/CD của bạn, hoặc khám phá các tính năng nâng cao của MTP như thực thi song song. Có các thiết lập kiểm thử thú vị nào không? Hãy chia sẻ chúng—hãy cùng duy trì tinh thần kiểm thử!