単体テスト
Babel Obfuscator を使用すると、コードを難読化した後も単体テストを維持できます。そのためには、コードに難読化を適用し、難読化されたコードに対して単体テストを実行するように Babel Obfuscator を設定します。この構成には XML マップファイルが必要です。XML マップファイルは、単体テストが使用する internal クラスへのアクセスから生じる問題の解決に役立ちます。これにより、コードを難読化した後も、単体テストは信頼できる正確な結果を出し続けます。コードの品質が保たれ、難読化後もコードが意図したとおりに動作し続けることを確認できます。
難読化されたコードに対して単体テストを確実に実行するには、Babel Obfuscator で XML マップファイルを使用する必要があります。XML マップファイルにより、Babel Obfuscator はターゲットアセンブリ内のクラス、メソッド、変数の名前を把握し、難読化後もそれらの一貫性を保てます。単体テストは多くの場合コードの内部構造に依存しており、特定のクラス、メソッド、変数への参照を使用することがあるため、これは重要です。難読化の際にこれらの参照が変更されると、単体テストは必要な要素にアクセスできなくなり、テストは失敗します。
この問題を解決するために、Babel Obfuscator はターゲットアセンブリの XML マップファイルを生成し、クラス、メソッド、変数の難読化前の元の名前を記録します。難読化の処理中に、Babel Obfuscator はマップファイル内の名前を難読化された名前に対応するように更新します。その後、単体テストを Babel Obfuscator と生成されたマップファイルで処理すると、単体テストは正しい難読化された名前にアクセスできるようになり、難読化されたコードに対して正しく実行できます。
単体テスト用に Babel を設定する
単体テストで Babel Obfuscator を使用するには、次の手順を実行します。
NuGet パッケージを参照する
単体テストプロジェクトに、Babel Obfuscator の NuGet パッケージへの参照を追加します。
XML マップファイルを読み込む
プロジェクトを変更し、ターゲットアセンブリ用に生成された XML マップファイルを Babel が読み込めるようにする MSBuild の記述を追加します。
リネームを無効にする
単体テストプロジェクトにリネームは必要ないため、無効にします。
<PropertyGroup>
<ObfuscateTypes>false</ObfuscateTypes>
<ObfuscateProperties>false</ObfuscateProperties>
<ObfuscateMethods>false</ObfuscateMethods>
<ObfuscateParameters>false</ObfuscateParameters>
<ObfuscateFields>false</ObfuscateFields>
<ObfuscateEvents>false</ObfuscateEvents>
</PropertyGroup>
<ItemGroup>
<MapInFile Include="$(SolutionDir)/MapOut/ClassLibrary.dll.map.xml" />
</ItemGroup>ここで、「ClassLibrary.dll.map.xml」は、テスト対象のターゲットアセンブリ用に生成された XML マップファイルです。
こうすることで、難読化されたコードに対して単体テストを実行でき、単体テストのコードが使用する難読化された名前への参照の問題を XML マップファイルで解決できます。この構成により、コードに難読化を適用した後も単体テストは動作し続けます。
サンプルプロジェクトを実行する
サンプルプロジェクトはこちら からダウンロードできます。サンプルプロジェクトを実行するには、次の手順に従ってください。
アーカイブを展開する
UnitTest.zip ファイルを、コンピューター上のフォルダーに展開します。
ライセンスファイルをコピーする
ライセンスファイルを、展開したフォルダーにコピーします。
ターミナルを開く
コマンドプロンプトまたはターミナルウィンドウを開き、ファイルを展開したフォルダーに移動します。
テストを実行する
「dotnet test」コマンドを入力して、サンプルプロジェクトを実行します。

単体テストの出力