![[アップデート] AWS Transform for .NET で変換時にユニットテストを自動生成できるようになったので試してみました](https://images.ctfassets.net/ct0aopd36mqt/6sr6qXoJHrSGCktI3d56Hk/4504fc5f0b23d1e8430dfc948c18f606/aws-transform.png?w=3840&fm=webp)
[アップデート] AWS Transform for .NET で変換時にユニットテストを自動生成できるようになったので試してみました
いわさです。
AWS Transform for .NET を使うと、.NET Framework のアプリケーションを新しい .NET へ変換することが出来ます。
この変換機能を使うと、変換後の .NET コード一式を生成して取得することが出来るのすが、そのコードに対するテストはこれまで自分で用意する必要がありました。
先日のアップデートで、AWS Transform for .NET がコード変換時に一緒にユニットテストの自動生成もできるようになりました。
ビジネスロジックやコントローラーなどのテスト可能なクラスが生成対象のようで、変換と同じジョブの中でテストコードまで用意してくれるようです。
デフォルトではオフになっていて、ジョブ開始時に明示的に有効にして開始する必要があいrます。
今回、Windows 11 + Visual Studio 2026 でこちらを確認してみたので紹介します。
検証に使うサンプルを用意する
テストが自動生成されることを見たいので、ユニットテストを1つも持たない .NET Framework 4.8 の ASP.NET MVC アプリを用意してみました。
ドキュメントにも「ビジネスロジックやコントローラなどテスト可能なクラスを対象とする」と記載されていました。
今回はよくありがちな計算するクラス、小計・割引・税を計算するビジネスロジッククラス PricingService と、それを使用する OrderController を作っています。
public decimal CalculateSubtotal(decimal unitPrice, int quantity)
{
if (unitPrice < 0)
{
throw new ArgumentException("unitPrice must be zero or positive", nameof(unitPrice));
}
if (quantity < 0)
{
throw new ArgumentException("quantity must be zero or positive", nameof(quantity));
}
return unitPrice * quantity;
}
Visual Studio で開くと、ソリューションにはアプリのプロジェクトだけがあり、テストプロジェクトはありません。この状態から変換して、テストが追加されるかを見ていきます。

ユニットテスト生成を有効にする
では実際に Visual Studio 2026 から変換してみましょう。
AWS Transform の IDE 機能は本日時点では IAM Identity Center 認証のみ対応しているようなので、IAM Identity Center でサインインした状態で進めます。[1]
ソリューションエクスプローラーでプロジェクトを右クリックし、「Port project with AWS Transform」を選びます。

変換ダイアログを見てみると、いつもの .NET ターゲットなどの指定の他に次のように「Generate unit tests」といオプションが表示されています。これかー。

上記にチェックを入れて、変換ジョブをスタートしましょう。
いつもどおりの変換ウィザードや履歴と、チャット欄などが起動されます。
変換のステップの後に、「Generate Unit Tests」のステップ(配下に「Plan Unit Test Generation」と「Generate Unit Tests」)が計画されていることが確認できました。

生成されたユニットテストを確認する
しばらく待って変換が完了すると、HogeShop.Tests というテストプロジェクトが追加され、PricingService に対応する PricingServiceTests.cs が生成されていました。
確認してみましょう。

テストは xUnit(using Xunit; と [Fact])で実装されていました。
テストコード抜粋はこんな感じです。
// ScenarioId: SCN-6e783b45
[Fact]
public void CalculateSubtotal_ValidInputs_ReturnsCorrectProduct()
{
var result = _sut.CalculateSubtotal(9.99m, 3);
Assert.Equal(29.97m, result);
Assert.IsType<decimal>(result);
}
// ScenarioId: SCN-ee95fa2b
[Fact]
public void CalculateSubtotal_NegativeUnitPrice_ThrowsArgumentException()
{
var ex = Assert.Throws<ArgumentException>(() => _sut.CalculateSubtotal(-0.01m, 1));
Assert.Equal("unitPrice", ex.ParamName);
Assert.Contains("unitPrice must be zero or positive", ex.Message);
}
// ScenarioId: SCN-d3057982
[Fact]
public void CalculateSubtotal_ZeroUnitPrice_DoesNotThrow()
{
var result = _sut.CalculateSubtotal(0m, 5);
Assert.Equal(0m, result);
Assert.IsType<decimal>(result);
}
ざっと見てみると、正常系だけでなく、例外や境界値のケースまで拾ってくれているようです。
また、各テストには // ScenarioId: SCN-... というコメントが付いていて、どのシナリオに対応するテストかを追えるようになっていました。
実装パターン見る感じ、ビジネスロジック側のコード分岐なども理解して境界値などを組み立てているっぽいです。やるな。
なお、今回は変換前のコードにユニットテストを置いていませんが、もともと MSTest・NUnit・xUnit のテストプロジェクトがある場合は、AWS Transform がそれらを変換先の .NET バージョンに移植して実行し、結果を変換レポートにまとめてくれるようです
The agent assesses existing unit test coverage (MSTest, NUnit, xUnit) and automatically generates missing unit tests
[Unit tests - AWS Transform]
さいごに
本日は AWS Transform for .NET で変換時にユニットテストを自動生成できるようになったので試してみました。
これはなかなか良い機能ですね。しかも生成されるコードも中々網羅性高そうだ。
今回試してないですが、既存テストがある場合に不足テスト追加してくれるってのも良いですね。
.NET 変換これからやる人はこちらのオプションの存在も知っておいてください。









