C#を使ったAWS CDKでユニットテストを行う
こちらの記事で、C#を使ったAWS CDKでSNSトピックを作成する方法を紹介しました。
今回はスタックに対するユニットテストを行いたいと思います。
テストプロジェクトの追加
ソリューションを右クリック⇒追加⇒新しいプロジェクトを選択します。

検索欄に「mstest」と入力し、MSTestテストプロジェクトを探し、次へをクリックします。

プロジェクト名はそのままで良いです。(任意で変更しても可)

ターゲットフレームワークもデフォルトで、作成をクリックします。

テストプロジェクトがソリューションに追加されました。

プロジェクト参照
テストプロジェクトから、テスト対象プロジェクトを参照する必要があるため、設定を行います。
テストプロジェクトの依存関係を右クリックし、プロジェクト参照の追加を選択します。

テスト対象プロジェクトが表示されるので、チェックをしてOKをクリックします。

また、テスト対象のスタックがinternalで宣言されているため、このままではテストプロジェクトから参照できません。そこで、テスト対象のファイルのusingに以下の2行を追加します。
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("TestProject1")]
これでテストプロジェクトからスタックを参照できるようになりました。
テストコードを書く
SNSサブスクリプションが1つ作成されることをテストするコードを書いてみます。TestProject1のUnitTest1.csに記述します。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Amazon.CDK;
using Amazon.CDK.Assertions;
using CdkCsharp;
namespace TestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var app = new App();
var stack = new CdkCsharpStack(app, "test-stack");
var template = Template.FromStack(stack);
template.ResourceCountIs("AWS::SNS::Subscription", 1);
}
}
}
テストをするには以下のコマンドを実行します。カレントをプロジェクトのルートフォルダに移動しておいてください。
dotnet test src
うまくいくと以下のような表示になります。

試しにSNSサブスクリプションの数を1⇒2に変更してテストしてみると、以下のように失敗することがわかります。

まとめ
C#のAWS CDKでもスタックのユニットテストができることがわかりました。
プロジェクト間の参照があるのでTypeScriptより少し面倒に感じましたが、普段のC#プロジェクトのテストと同じようにテストができるのは非常にありがたいです。