皆さん、こんにちは、.NET開発者の皆さん!Microsoft Testing Platform (MTP) と .NET 10 を使って、テストのスキルを向上させる準備はできていますか?従来のVSTestランナーで dotnet test を使ってきたなら、**MTP** があなたのテストをよりスムーズに、より速く、より柔軟にするために登場しました。この対話形式のガイドでは、**MTP**、別名 **MicrosoftTestingPlatform** が何であるか、なぜVSTestよりも優れているのか、そしてプロジェクトのために堅牢なテストを構築するために **.NET 10** で dotnet test と共にそれを活用する方法を探ります。基本的なMSTestプロジェクトから、スタンドアロン実行可能ファイルを含むマルチプロジェクトソリューションまで、この設定を試すために私が取った手順を説明します。さあ、**MTP, MicrosoftTestingPlatform, .NET 10, dotnet test** の世界に飛び込み、テストをもっと簡単で楽しいものにしましょう!
開発チームが最大限の生産性で協力できる、統合されたオールインワンプラットフォームをお探しですか?
Apidogはあなたのすべての要求に応え、Postmanをはるかに手頃な価格で置き換えます!
.NET開発においてテストが重要な理由
実際に手を動かす前に、なぜテストが重要なのかについて話しましょう。小さなアプリを構築している場合でも、大規模なエンタープライズシステムを構築している場合でも、テストはコードが期待どおりに機能することを確認し、バグを早期に発見し、深夜のデバッグセッションからあなたを救います。MSTest と MTP で作成するような自動化された単体テストは、機能を確認し、コード品質を向上させ、リファクタリングを容易にします。.NET 10 のパフォーマンス向上と MTP の最新のテストフレームワークにより、高速で信頼性が高く、CI/CDパイプラインに簡単に統合できるテストを作成する準備が整います。その方法を見てみましょうか?私の旅に続きましょう!
Microsoft Testing Platform (MTP) とは?
Microsoft Testing Platform (MTP)、または MicrosoftTestingPlatform は、古くなったVSTestランナーを置き換えるために導入された、Microsoftの次世代テストフレームワークです。複雑なアダプターとDLLベースの実行に依存するVSTestとは異なり、**MTP** は.NETでテストを実行するための合理化されたネイティブなエクスペリエンスを提供します。これは .NET 10 に組み込まれており、スタンドアロンの実行可能テストランナーや dotnet test とのより良い統合などの機能により、より高速で柔軟です。**MTP** はMSTest、NUnit、xUnitをサポートしており、CI/CDやクロスプラットフォーム開発を含む現代のワークフロー向けに設計されています。これは、.NET 10 のパフォーマンス向上に最適化された、VSTestのよりクールで効率的な兄弟と考えることができます。
ステップ1:MTPで基本的なMSTestプロジェクトを設定する
まず、**MTP** の動作を見るために、基本的なMSTestプロジェクトを作成することから始めましょう。私がどのように開始したかをご紹介します。
プロジェクトの作成:
- ターミナルを開き、.NET CLIを使って新しいMSTestプロジェクトをスキャフォールドします。
dotnet new mstest -n MyMtpTests
- これにより、デフォルトのテストファイル(
UnitTest1.cs)と.csprojファイルを含むMyMtpTestsというプロジェクトフォルダが作成されます。
プロジェクトファイルの確認:
- 生成された
MyMtpTests.csprojは次のようになります。
<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>
- これは、コードカバレッジに Coverlet を、テスト実行に Microsoft.NET.Test.Sdk を使用して、VSTestで標準的なMSTestプロジェクトを設定します。
テストの実行:
- プロジェクトフォルダに移動します。
cd MyMtpTests
- デフォルトのテストを実行します。
dotnet test
- VSTestランナーが
UnitTest1.csのサンプルテストを実行し、テストが合格したことを確認する出力と、Coverletからのカバレッジ統計が表示されます。

何が起きているのか? これはVSTestを使った伝統的な設定ですが、**MTP** にアップグレードする前の確固たるベースラインです。このプロジェクトはテストをDLLとして実行しますが、それは問題ありませんが、**MTP** の実行可能ファイルアプローチほど柔軟ではありません。
ステップ2:MTP実行可能ファイルベースのテストランナーへの進化
それでは、dotnet test なしでテストを実行できる **MTP** のスタンドアロン実行可能ランナーに切り替えて、さらに面白くしましょう。私がどのように行ったかをご紹介します。
プロジェクトファイルの更新:
MyMtpTests.csprojを変更して **MTP** を有効にし、実行可能ファイルを作成します。
<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>
主な変更点:
<EnableMSTestRunner>true</EnableMSTestRunner>:**MTP** のテストランナーをアクティブにします。<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>:dotnet testとの互換性を確保します。<OutputType>Exe</OutputType>:DLLではなくスタンドアロンの実行可能ファイルを出力します。
プロジェクトのビルド:
- 実行します。
dotnet build
- これにより、
bin/Debug/net8.0フォルダに実行可能ファイル(例:MyMtpTests.exe)が生成されます。

実行可能ファイルの実行:
- 出力ディレクトリに移動します。
cd bin/Debug/net8.0
- 実行可能ファイルを実行します。
- Windows:
MyMtpTests.exe - macOS/Linux:
./MyMtpTests - テストはスタンドアロンのコンソールアプリとして実行され、
dotnet testは不要です!

これがすごい理由:実行可能ファイルアプローチは、カスタム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
MyLibrary/Calculator.csにCalculatorクラスを実装します。
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. テストプロジェクトの作成:
- MSTestプロジェクトをスキャフォールドします。
dotnet new mstest -n MyLibrary.Tests
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. プロジェクト参照の追加:
- テストプロジェクトをライブラリにリンクします。
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の設定:
MyLibrary.Tests.csprojを更新して **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>
- 必要に応じて、一貫性のために
MyLibrary.csprojを更新します(厳密には必要ありませんが)。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
7. .NET 10へのアップグレード:
- dotnet.microsoft.com から .NET 10 SDK をダウンロードします(お使いのOS—Windows、macOS、またはLinuxと互換性があることを確認してください)。

- 両方の
.csprojファイルを更新して .NET 10 をターゲットにします。
<TargetFramework>net10.0</TargetFramework>
8. dotnet.configファイルの作成:
- ソリューションルートに
dotnet.configを作成し、以下を記述します。
[dotnet.test.runner]
name = "Microsoft.Testing.Platform"
- これにより、**.NET 10** で
dotnet testとの **MTP** のネイティブ統合が有効になります。
9. テストのビルドと実行:
- ソリューションルートから実行します。
dotnet test
- **MTP** は、**.NET 10** の最適化を活用してテストを実行します。合格/不合格およびカバレッジ統計を含む、すべてのテストの出力が表示されます。

.NET 10とMTPがテストをどのように改善するか
MTP と .NET 10 はテストを次のレベルへと引き上げます。
- 速度:**MTP** のネイティブランナーは **.NET 10** 向けに最適化されており、VSTestと比較して起動時間を短縮します。
- 柔軟性:スタンドアロン実行可能ファイルによりテストがポータブルになり、カスタムCI/CDやコンテナ化された環境に最適です。
- スケーラビリティ:マルチプロジェクトサポートは複雑なソリューションに対応し、**MTP** は一貫したテスト実行を保証します。
- 最新機能:**.NET 10** のAOTコンパイルとメモリ最適化によりテストの実行が高速化され、**MTP** は並列テスト実行やカスタムレポーターなどの高度な機能をサポートします。
ユーザーは **MTP** について興奮しています:「これはVSTestのようですが、余計なものがなく、より速く、よりクリーンです!」 **.NET 10** を使えば、最先端のパフォーマンスが得られ、**MTP** は dotnet test を楽しくします。
トラブルシューティングのヒント
- テストが実行されない場合:**.NET 10 SDK** がインストールされており、
TargetFrameworkがnet10.0に設定されていることを確認してください。 - MTPが有効になっていない場合:
EnableMSTestRunnerとTestingPlatformDotnetTestSupportが.csprojまたはdotnet.configに含まれていることを確認してください。 - カバレッジが不足している場合:
coverlet.collectorが含まれていることを確認し、dotnet test --collect:"XPlat Code Coverage"を実行してください。 - 実行可能ファイルが失敗する場合:
OutputTypeがExeであることを確認し、.exeを実行する前にdotnet buildを実行してください。
結論
これで、MTP (MicrosoftTestingPlatform), .NET 10, dotnet test を使用して最新のテスト環境を構築するプロになりました!基本的なMSTestプロジェクトから、スタンドアロン実行可能ファイルを含むマルチプロジェクトソリューションまで、**MTP** がVSTestをいかに凌駕し、**.NET 10** がパフォーマンスをいかに向上させるかを見てきました。さらにテストを追加したり、CI/CDパイプラインに統合したり、並列実行などの **MTP** の高度な機能を探索したりしてみてください。素晴らしいテスト設定をお持ちですか?ぜひ共有してください—テストの活気を保ちましょう!
