วิธีรัน Test ด้วย Dotnet Test ใน .NET 10

Ashley Goolam

Ashley Goolam

27 August 2025

วิธีรัน Test ด้วย Dotnet Test ใน .NET 10

สวัสดีครับนักพัฒนา .NET ทุกท่าน! พร้อมที่จะยกระดับการทดสอบของคุณด้วย Microsoft Testing Platform (MTP) และ .NET 10 แล้วหรือยัง? หากคุณเคยใช้ dotnet test กับ VSTest runner แบบดั้งเดิม เตรียมตัวให้พร้อม—MTP มาเพื่อทำให้การทดสอบของคุณราบรื่นขึ้น เร็วขึ้น และยืดหยุ่นมากขึ้น ในคู่มือฉบับนี้ เราจะมาสำรวจว่า MTP หรือ MicrosoftTestingPlatform คืออะไร ทำไมถึงดีกว่า VSTest และวิธีนำมาใช้กับ dotnet test ใน .NET 10 เพื่อสร้างการทดสอบที่แข็งแกร่งสำหรับโปรเจกต์ของคุณ ผมจะพาคุณไปดูขั้นตอนที่ผมใช้ในการทดลองกับการตั้งค่านี้ ตั้งแต่โปรเจกต์ MSTest พื้นฐาน ไปจนถึงโซลูชันแบบหลายโปรเจกต์ที่มีไฟล์ปฏิบัติการแบบสแตนด์อโลน มาดำดิ่งสู่โลกของ MTP, MicrosoftTestingPlatform, .NET 10, dotnet test และทำให้การทดสอบง่ายขึ้นและสนุกยิ่งขึ้นกันเถอะ!

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสาร API ที่สวยงาม หรือไม่?

ต้องการแพลตฟอร์มแบบ All-in-One ที่รวมทุกอย่างสำหรับทีมพัฒนาของคุณ เพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด หรือไม่?

Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ในราคาที่เข้าถึงได้มากกว่ามาก!
ปุ่ม

ทำไมการทดสอบจึงมีความสำคัญในการพัฒนา .NET

ก่อนที่เราจะลงมือทำ มาคุยกันว่าทำไมการทดสอบจึงเป็นเรื่องสำคัญ ไม่ว่าคุณจะสร้างแอปขนาดเล็กหรือระบบองค์กรขนาดใหญ่ การทดสอบช่วยให้มั่นใจว่าโค้ดของคุณทำงานได้ตามที่คาดหวัง ดักจับข้อผิดพลาดตั้งแต่เนิ่นๆ และช่วยให้คุณไม่ต้องแก้ไขข้อผิดพลาดตอนดึกๆ การทดสอบหน่วยอัตโนมัติ เช่นที่เราจะสร้างด้วย MSTest และ MTP ช่วยให้คุณตรวจสอบฟังก์ชันการทำงาน ปรับปรุงคุณภาพโค้ด และทำให้การปรับโครงสร้างโค้ดเป็นเรื่องง่าย ด้วยการเพิ่มประสิทธิภาพของ .NET 10 และเฟรมเวิร์กการทดสอบที่ทันสมัยของ MTP คุณพร้อมที่จะเขียนการทดสอบที่รวดเร็ว เชื่อถือได้ และง่ายต่อการรวมเข้ากับ CI/CD pipelines พร้อมที่จะดูวิธีการแล้วหรือยัง? มาติดตามการเดินทางของผมกัน!

Microsoft Testing Platform (MTP) คืออะไร?

Microsoft Testing Platform (MTP) หรือ MicrosoftTestingPlatform คือเฟรมเวิร์กการทดสอบยุคถัดไปของ Microsoft ที่เปิดตัวเพื่อมาแทนที่ VSTest runner ที่ล้าสมัย แตกต่างจาก VSTest ที่พึ่งพาอะแดปเตอร์ที่ซับซ้อนและการรันแบบ DLL-based, MTP มอบประสบการณ์การรันการทดสอบใน .NET ที่ราบรื่นและเป็นแบบเนทีฟ มันถูกสร้างขึ้นใน .NET 10 ทำให้เร็วขึ้นและยืดหยุ่นมากขึ้น ด้วยคุณสมบัติเช่น test runner แบบไฟล์ปฏิบัติการสแตนด์อโลน และการรวมเข้ากับ 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 Executable-Based Test Runner

ตอนนี้ มาทำให้เรื่องน่าตื่นเต้นยิ่งขึ้นด้วยการเปลี่ยนไปใช้ **MTP**’s standalone executable runner ซึ่งช่วยให้คุณรันการทดสอบได้โดยไม่ต้องใช้ 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 setups ที่กำหนดเอง หรือสภาพแวดล้อมที่ไม่มีการติดตั้ง .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 pipeline ของคุณ หรือสำรวจคุณสมบัติขั้นสูงของ MTP เช่น การรันแบบขนาน มีการตั้งค่าการทดสอบเจ๋งๆ หรือไม่? แชร์กันเลย—มาทำให้การทดสอบเป็นเรื่องสนุกต่อไป!

ปุ่ม

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API