sdk
latest
false
重要 :
请注意此内容已使用机器翻译进行了部分本地化。 新发布内容的本地化可能需要 1-2 周的时间才能完成。
UiPath logo, featuring letters U and I in white

开发者指南

上次更新日期 2024年10月25日

测试您的活动

实施新活动后,测试其是否按预期工作非常重要。 您可以通过以下方式之一测试您的活动。

单元测试

测试活动代码的最简单、最快的方法是编写隔离活动代码并测试各个方案的单元测试。

例如:

[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 机器人运行一样运行该活动。

让我们看一下这个示例:

[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 执行程序中测试活动代码。 为此,我们可以使用以下两个选项之一。

选项 1:System.Diagnostics.Debugger.Launch()

  1. 在要在代码中设置断点的位置添加“ Debugger.Launch() ”。
  2. 在 UiPath.Studio 中构建新包并更新项目中的版本,然后选择“运行”
  3. JIT 调试器会提示你选择要用于调试的 Visual Studio 实例。



  4. 选择实例后,JIT 将在添加了Debugger.Launch()的行处停止执行,并从该行开始正常的调试过程。


选项 2:附加到 Visual Studio 中的流程

另一个选项是延迟执行,然后将 Visual Studio 附加到执行程序进程。 虽然此方法需要更多开销,但它允许在不修改的情况下调试活动代码。

  1. 要延迟执行,请添加 “延迟”活动,或者在 Windows 项目中添加 “消息框”活动。



  2. 选择“运行” ,然后转到 Visual Studio 并选择“调试”> “附加到流程”



  3. UiPath.Executor筛选流程列表,选择所有流程,然后单击 “附加”。


延迟过后,流程执行将在您在代码中添加的断点处中断。

此页面有帮助吗?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath Logo White
信任与安全
© 2005-2024 UiPath。保留所有权利。