1. 単体テストの作成

スクリプトの単体テストを作成する方法

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

前提条件

注意

以前のバージョンの CLI からアップグレードする場合 (< 1.1.0)、必要なすべての依存関係が存在することを確認するために、作業ディレクトリを再度初期化することをお勧めします。

ch-cli scripting initialize -f <your-folder-path>

概要

Sitecore Content Hub CLI (> = 1.1.0) では、xUnit.netNSubstitute を使用してスクリプトの単体テストを作成および実行できます。

制限事項

  • [Theory] を使用する場合、[InlineData] が現在、テスト メソッドに引数を提供する唯一の方法です。

スクリプトの作成

作業ディレクトリに MyScript.csx という名前で新しいスクリプトを作成します。

#load "./references/Action.csx"
/**------------ Include above to support intellisense on Content Hub types in editor ----------------**/
// Script Start

var entity = Context.Target as IEntity;
if (entity == null)
{
MClient.Logger.Error("Entity is null.");
}

// ...

テスト スクリプトの作成

単体テスト スクリプトは作業ディレクトリ内の unit-tests ディレクトリにあり、テスト対象のスクリプトにちなんで名付けられる (たとえば、MyScript.csx) ことが期待されます。そのため、スクリプトごとに 1 つのテスト スクリプトを用意することが重要です。

#load "../references/UnitTest.csx"
/**------------ Include above to support intellisense on Content Hub types in editor ----------------**/
// Script Start

using System.Threading.Tasks;
using NSubstitute;
using Xunit;

[Fact]
public async Task Should_Log_Error_If_Entity_Is_Null()
{
// Arrange
var client = Substitute.For<IMClient>();

var context = Substitute.For<IActionScriptContext>();
context.Target.Returns(null);

// Act
await ScriptRunner.ExecuteAsync(client, context);

// Assert
client.Logger.Received(1).Error("Entity is null.");
}

この時点で、ファイル構造は次のようになります。

[working folder]
├── lib
   └── ...
├── references
   ├── UnitTest.csx
   └── ...
├── unit-tests
   └── MyScript.csx <-- test script with the same name
├── MyScript.csx
├── omnisharp.json
├── references.json

スクリプト コードの説明

  1. 名前付きテスト メソッドを作成します。[Fact] 属性は、このメソッドが単体テストであることをテスト ランナーに伝えます。

    [Fact]
    public async Task Should_Log_Error_If_Entity_Is_Null()
  2. 実際のスクリプトに渡される必要なオブジェクトのモックを作成します。これにより、さまざまなシナリオのコンテキストを設定したり、スクリプト内の MClient インスタンスを介して行われている API 呼び出しを模倣したりできます。この例では、コンテキストの Target プロパティが明示的に null に設定されています。

    var client = Substitute.For<IMClient>();
    
    var context = Substitute.For<IActionScriptContext>();
    context.Target.Returns(null);
  3. 関連するスクリプトを (ファイル名に基づいて) コンパイルして実行し、client インスタンスと context インスタンスを渡します。一般的に使用される AAA (Arrange - Act - Assert) パターンに従う場合、この呼び出しは Act セクションになります。

    await ScriptRunner.ExecuteAsync(client, context);
  4. テストの条件が満たされていることを確認します。この場合、エラー メッセージが記録されています。

    client.Logger.Received(1).Error("Entity is null.");

単体テストの実行

すべての単体テストを実行します。

ch-cli scripting unit-test (--folder <path to working directory>)

単一の単体テスト ファイルを実行します。

ch-cli scripting unit-test (--folder <path to working directory>) --name <test file>

Example:
ch-cli scripting unit-test --name <test file>
この記事を改善するための提案がある場合は、 お知らせください!