SDK
最新
バナーの背景画像
開発者ガイド
最終更新日 2024年3月23日

アクティビティをテストする

新しいアクティビティの実装後は、想定どおりに動作するかをテストすることが重要です。 アクティビティは次のいずれかの方法でテストできます。

単体テスト

最も簡単かつ迅速にアクティビティ コードをテストする方法は、単体テストを記述してアクティビティ コードを分離し、個々のシナリオをテストすることです。

例:

[Theory]
[InlineData(1, Operation.Add, 1, 2)]
[InlineData(3, Operation.Subtract, 2, 1)]
[InlineData(3, Operation.Multiply, 2, 6)]
[InlineData(6, Operation.Divide, 2, 3)]
public void Calculator_ReturnsAsExpected(int firstNumber, Operation operation, int secondNumber, int expectedResult)
{
    var calculator = new Calculator()
    {
        SelectedOperation = operation
    };

    var result = calculator.ExecuteInternal(firstNumber, secondNumber);

    Assert.Equal(expectedResult, result);
}[Theory]
[InlineData(1, Operation.Add, 1, 2)]
[InlineData(3, Operation.Subtract, 2, 1)]
[InlineData(3, Operation.Multiply, 2, 6)]
[InlineData(6, Operation.Divide, 2, 3)]
public void Calculator_ReturnsAsExpected(int firstNumber, Operation operation, int secondNumber, int expectedResult)
{
    var calculator = new Calculator()
    {
        SelectedOperation = operation
    };

    var result = calculator.ExecuteInternal(firstNumber, secondNumber);

    Assert.Equal(expectedResult, result);
}
この例は、Calculator クラスの新しいインスタンスを作成し、ExecuteInternal 関数を呼び出すだけの単純なものです。 このコンテキストでのアクティビティに関連する特定の内容はなく、基本的な単体テストの原則が適用されます。

例については、GitHub にあるサンプルの [計算機能] アクティビティのプロパティをご覧ください。

ワークフロー テスト

ワークフロー テストは、WorkflowInvoker クラスを利用してアクティビティをワークフロー内に配置して、UiPath Robot で実行されるのと同じように実行する単体テストの一種です。

次の例を見てみましょう。

[Fact]
public void Divide_ReturnsAsExpected()
{
    var activity = new Calculator()
    {
        FirstNumber = 4,
        SecondNumber = 2,
        SelectedOperation = Operation.Divide
    };

    var runner = new WorkflowInvoker(activity);
    runner.Extensions.Add(() => workflowRuntimeMock.Object);

    var result = runner.Invoke(TimeSpan.FromSeconds(1)); //the runner will return a dictionary with the values of the OutArguments

    //verify that the result is as expected
    Assert.Equal(2, result["Result"]);

    //verify that we logged a message
    workflowRuntimeMock.Verify(x => x.LogMessage(It.IsAny<LogMessage>()), Times.Once);
}[Fact]
public void Divide_ReturnsAsExpected()
{
    var activity = new Calculator()
    {
        FirstNumber = 4,
        SecondNumber = 2,
        SelectedOperation = Operation.Divide
    };

    var runner = new WorkflowInvoker(activity);
    runner.Extensions.Add(() => workflowRuntimeMock.Object);

    var result = runner.Invoke(TimeSpan.FromSeconds(1)); //the runner will return a dictionary with the values of the OutArguments

    //verify that the result is as expected
    Assert.Equal(2, result["Result"]);

    //verify that we logged a message
    workflowRuntimeMock.Verify(x => x.LogMessage(It.IsAny<LogMessage>()), Times.Once);
}
単体テストと同様に、アクティビティの新しいインスタンスを作成しますが、インスタンスでメソッドを直接呼び出すのではなく、アクティビティを WorkflowInvoker 内に配置し、ワークフローの一部として実行します。 ワークフローは最終的に Calculator クラスの Execute 関数を呼び出します。この関数は保護されており、直接呼び出すことができなかったことに注意してください。これは、このアプローチを使用することの間接的な利点です。
このアプローチは通常、アクティビティが他のアクティビティの結果に依存している場合に使用されます。 そのような場合、複数のアクティビティを含むワークフローを作成し、WorkflowInvoker に実行させます。

UiPath Studio をプロセスにアタッチする

場合によっては、UiPath.Robot Executor 内でアクティビティ コードをテストする必要があります。 これを実現するには、2 つのオプションのいずれかを使用できます。

オプション 1: System.Diagnostics.Debugger.Launch()

  1. ブレークポイントがコードにヒットする場所に Debugger.Launch() を追加します。
  2. UiPath.Studio で新しいパッケージを構築し、プロジェクトのバージョンを更新してから、[実行] を選択します。
  3. JIT デバッガーでは、デバッグに使用する Visual Studio インスタンスを選択するように求められます。



  4. インスタンスを選択すると、JIT は Debugger.Launch() が追加された行で実行を停止し、そこから通常のデバッグ プロセスを開始できます。


オプション 2: Visual Studio のプロセスにアタッチする

別のオプションは、実行を遅らせてから、Visual Studio を Executor プロセスにアタッチする方法です。 この方法ではオーバーヘッドが増加しますが、アクティビティ コードを変更せずにデバッグできます。

  1. 実行を遅延させるには、[待機] アクティビティを追加するか、Windows プロジェクトの場合は、[メッセージ ボックス] アクティビティを追加します。



  2. [実行] を選択し、Visual Studio に移動して [デバッグ] > [プロセスにアタッチ] を選択します。



  3. プロセス リストを UiPath.Executor でフィルター処理し、すべてのプロセスを選択して [アタッチ] をクリックします。


遅延が経過すると、コードに追加したブレークポイントでプロセスの実行が中断されます。

Was this page helpful?

サポートを受ける
RPA について学ぶ - オートメーション コース
UiPath コミュニティ フォーラム
UiPath ロゴ (白)
信頼とセキュリティ
© 2005-2024 UiPath. All rights reserved.