16.2 Data-Driven Testing, Test Verification Activities & Mock Activities
Key Takeaways
Data-driven test cases take variations from Excel or CSV files, Data Service entities, or Test Data Queues.
Verification activities include Verify Expression, Verify Expression With Operator (Equality, Inequality, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual), Verify Range, and Verify Control Attribute.
ContinueOnFailure defaults to True, so a failed verification is recorded and the test continues unless you set it to False.
Mock workflow under test creates workflowName_mock under Project > Mocks, where Surround with Mock replaces activities without touching the original workflow.
Only mocked activities are editable in mock files, activity coverage ignores mock activities, and mocks are not available in Test Automation projects.
16.2 Data-Driven Testing, Test Verification Activities & Mock Activities
Core Concept: Enterprise automation testing requires validating business logic across hundreds of boundary conditions, edge cases, and unexpected permutations without duplicating workflow code. Data-Driven Testing (DDT) enables a single parameterized test case to iterate dynamically across external datasets. To evaluate outcomes, UiPath provides specialized Test Verification activities that capture granular diagnostics and screenshots upon failure. Furthermore, to isolate automated tests from destructive or volatile external systems (such as financial clearinghouses, ERP systems, or SMS gateways), the Mock Activity engine allows developers to substitute simulated responses without modifying production workflows.
When testing software robots, testing only happy-path scenarios is a recipe for production outages. An invoice processing robot might handle standard domestic vendors flawlessly, but crash when encountering a foreign vendor with international tax structures, special currency formats, or missing tax exemption IDs. By coupling Data-Driven Testing with non-intrusive Mocking and rigorous Verification assertions, automation engineers can achieve comprehensive test coverage across complex enterprise scenarios.
1. Data-Driven Testing (DDT) in UiPath Studio
Data-Driven Testing is an automated testing methodology where test input data and expected verification results are stored in external data sources and fed iteratively into a single parameterized test case.
+-----------------------------------------------------------------------------+
| DATA-DRIVEN TESTING ARCHITECTURE |
| |
| External Data Source |
| (Excel / CSV / Data Service entity / Test Data Queue) |
| +---------+---------------+---------------+----------------+ |
| | Row No. | in_InvoiceVal | in_VendorTier | expected_Status| |
| +---------+---------------+---------------+----------------+ |
| | Row 1 | 500.00 | Tier_A | Approved | |
| | Row 2 | 15000.00 | Tier_B | ManualReview | |
| | Row 3 | -50.00 | Tier_A | Rejected | |
| +---------+---------------+---------------+----------------+ |
| │ |
| │ Bound to Test Case Arguments |
| ▼ |
| +---------------------------------------------------------------------+ |
| | Parameterized BDD Test Case (.xaml) | |
| | | |
| | Iteration 1: [in_InvoiceVal=500, Tier=A] --> [Pass: Approved] | |
| | Iteration 2: [in_InvoiceVal=15000, Tier=B] --> [Pass: Review] | |
| | Iteration 3: [in_InvoiceVal=-50, Tier=A] --> [Pass: Rejected] | |
| +---------------------------------------------------------------------+ |
| │ |
| ▼ |
| Aggregated Execution Report: 3 Iterations (3 Passed, 0 Failed) |
+-----------------------------------------------------------------------------+
Supported Test Data Sources
A data-driven test case gets its variations from one of these sources:
- Excel or CSV files: each column maps to an argument of the test case and each row is one data variation.
- Data Service (Data Fabric) entities: records of an entity supply the variations.
- Test Data Queues in Orchestrator: Studio adds an
IDictionaryargument named after the queue, and each test iteration pulls one queue item and passes its key-value pairs in that argument.
Setting Up Data-Driven Test Cases in Studio
- Create a test case with test data, or open the context menu of an existing test case and add or update test data.
- Choose the Source (file, Data Service entity, or Test Data Queue) and select the data.
- Studio links the data to the test case's arguments. Each variation appears as its own entry when you run the test case from the Test Explorer.
- A failed verification in one variation is reported for that variation; the other variations still run.
2. Test Verification Activities Deep Dive (UiPath.Testing.Activities)
The UiPath.Testing.Activities package provides specialized activities designed specifically for validating outcomes within the Then container of a BDD test case. Unlike standard programmatic checks (such as an If activity throwing an exception), verification activities integrate natively with the Studio Test Explorer, Orchestrator test reporting, and Test Manager analytics.
+-----------------------------------------------------------------------------+
| TEST VERIFICATION ACTIVITIES SUITE |
| |
| 1. Verify Expression |
| +-------------------------------------------------------------------+ |
| | Expression: [ actualTax = 8.25 AndAlso status = "Complete" ] | |
| | Evaluates to: TRUE / FALSE | |
| +-------------------------------------------------------------------+ |
| |
| 2. Verify Expression With Operator |
| +-------------------------------------------------------------------+ |
| | First: [ actualTax ] Operator: [ Equality ] Second: [ expected ]| |
| | Result shows both compared values -> PASSED | |
| +-------------------------------------------------------------------+ |
| |
| 3. Verify Control Attribute |
| +-------------------------------------------------------------------+ |
| | Target: [ UI Element - 'lbl_Status' ] | |
| | Attribute: [ "text" ] Operator: [ Equality ] Value: [ "Success" ]| |
| +-------------------------------------------------------------------+ |
+-----------------------------------------------------------------------------+
1. Verify Expression
- Mechanics: Verifies a single Boolean expression, for example
actualCount > 0 AndAlso isAccountActive. - Trade-off: Very flexible, but a failure only tells you the expression was False, not which part failed or which values caused it.
2. Verify Expression With Operator
- Mechanics: Compares a FirstExpression and a SecondExpression with an Operator chosen from Equality, Inequality, GreaterThan, GreaterThanOrEqual, LessThan, and LessThanOrEqual.
- Advantage: The verification result shows both values that were compared, which makes a failure in a pipeline report much easier to diagnose.
3. Verify Range
- Checks whether an expression lies inside or outside a range defined by lower and upper limits.
4. Verify Control Attribute
- Combines UI targeting with a verification: it reads an attribute of a UI element, such as its text or enabled state, and compares it with an expected value.
- Use Case: Checking that a confirmation label reads "Order submitted" or that a button becomes disabled after a click.
Common Properties of Verification Activities
| Property | Meaning |
|---|---|
| ContinueOnFailure | Default True: the test continues after a failed verification, which is recorded as failed. Set it to False to stop at the first failure. Inside a Try Catch with ContinueOnFailure True, no error is caught |
| TakeScreenshotIfFailed / TakeScreenshotIfSucceded | Take a screenshot when the verification fails or succeeds |
| AlternativeVerificationTitle | A readable name for the verification shown in Orchestrator instead of the activity name |
| OutputMessageFormat | Format of the verification message; a global format can be set in Project Settings |
| Result | Output Boolean with the verification outcome, useful for notifications or custom reports |
3. Mocking Dependencies in UiPath: The Mock Activity Engine
In enterprise RPA architectures, automated workflows interact with numerous external dependencies: credit card gateways, core banking mainframes, production ERP databases, third-party REST APIs, and outbound email servers.
+-----------------------------------------------------------------------------+
| THE MOCKING ARCHITECTURE |
| |
| Production Workflow: ProcessOrder.xaml |
| [ Read Order ] ---> [ Call Real Stripe API ] ---> [ Update Internal DB ] |
| │ |
| │ Create Test Case: Mock workflow under test |
| ▼ |
| Mock file: Mocks\ProcessOrder_mock.xaml |
| [ Read Order ] ---> [ MOCK (Surround with Mock) ] ---> [ Update Internal DB ]
| | |
| |-- [Original Activity: Stripe HTTP Request] (Bypassed)
| |-- [Mocked Activity: Assign out_Token = "tok_test"] |
| +-----------------------------------------------------+|
+-----------------------------------------------------------------------------+
The Problem with Live Dependencies
- Destructive Actions: Executing a live test might trigger real credit card charges, generate valid purchasing orders, or dispatch live emails to customers.
- Environmental Instability: External sandbox environments or third-party web services often experience downtime, rate limiting, or maintenance windows, leading to false-positive test failures.
- Data Unpredictability: External systems may lack reliable test fixtures, making deterministic assertions impossible.
The Historical Anti-Pattern: Code Contamination
Before native mocking, developers inserted conditional branches directly into production workflows:
' ANTI-PATTERN: DO NOT DO THIS IN PRODUCTION WORKFLOWS!
If isTestingMode Then
out_AuthCode = "MOCK_AUTH_123"
Else
' Call Real Payment Gateway Activity
out_AuthCode = CallLiveStripeAPI(creditCardNumber)
End If
This anti-pattern contaminates production code, increases workflow complexity, introduces security vulnerabilities, and risks deploying test switches into production.
Mock Testing in Studio
Studio's mock testing replaces selected activities, or even whole invoked workflows, with lightweight stand-ins during a test run, without editing the original workflow:
- Create the mock file. In the Create Test Case window, select Mock workflow under test. Studio creates a copy named
workflowName_mockunder Project > Mocks, mirroring the original path. For example,Tests\testFolder01\testCase07.xamlbecomesMocks\Tests\testFolder01\testCase07_mock.xaml. You can also pick an existing mock file from the Mock dropdown. - Surround activities with mocks. In the mock file, right-click an activity and select Surround with Mock. Put the stand-in logic, such as an Assign that sets the expected output, inside the mock. In a Given-When-Then test case, Surround with Mock is available only for activities within When.
- Keep mocks in sync. Changes in the source workflow are applied to the mock file when you save the project, and Synchronize Mock syncs mock files or folders on demand. Remove mock activity removes a mock.
Rules to remember:
- In a mock file, you can edit only the mocked activities.
- A workflow can have several mock files.
- Activity coverage counts only the activities of the source workflow, not the mock activities.
- Mock testing is not available in Test Automation projects; it is used in process projects that contain test cases.
- The original workflow is never modified, so production logic stays free of test switches.
4. Summary Matrix: Verification Activities & Mocking Patterns
| Feature | Verify Expression | Verify Expression with Operator | Verify Control Attribute | Mock Activity |
|---|---|---|---|---|
| Primary Use | Complex Boolean logic statements. | Comparisons with Equality, Inequality, GreaterThan, and similar operators. | UI element state assertions on live screens. | Simulating external dependency responses. |
| Diagnostics | Basic True / False outcome. | Both compared values in the result. | Current attribute vs. expected attribute. | The mock's stand-in logic runs instead of the original activity. |
| Screenshot | Supported on failure (TakeScreenshotIfFailed). | Supported on failure (TakeScreenshotIfFailed). | Supported on failure (TakeScreenshotIfFailed). | N/A (Execution activity, not verification). |
| Production Impact | In test case only (No impact). | In test case only (No impact). | In test case only (No impact). | None; the mock file lives in the Mocks folder. |
An RPA developer is configuring assertions for a financial rounding workflow. Why is Verify Expression with Operator strongly recommended over Verify Expression when asserting that out_CalculatedFee equals in_ExpectedFee?
Verify Expression cannot evaluate decimal or floating-point numerical types.
Verify Expression with Operator automatically retries failed calculations up to three times.
Verify Expression does not support capturing error screenshots upon test failure.
Verify Expression with Operator records the exact runtime values of both operands in the failure logs, whereas Verify Expression only records that the condition evaluated to False.
An automation team needs to unit-test a customer onboarding workflow that triggers an external credit card charge via an HTTP Request activity. How does UiPath Studio allow developers to simulate this activity's output without modifying the production workflow .xaml file?
By using an If activity inside the production workflow conditioned on a global Boolean testing flag.
By creating a mock copy of the workflow (workflowName_mock in the Mocks folder) and using Surround with Mock on the HTTP Request activity, leaving the original workflow unchanged.
By deploying a temporary testing stub package directly to the Orchestrator host feed.
By setting the activity's execution timeout property to 0 milliseconds in Studio.
A data-driven test case is configured with an external Excel workbook containing 25 test records. During execution, the assertion in the Then container fails on Row 5 with ContinueOnFailure set to False. What is the execution behavior of the remaining 20 rows?
The remaining 20 rows continue to execute independently, because iteration failures are scoped to the individual data row iteration.
The entire test run terminates immediately and none of the remaining 20 rows are executed.
Studio restarts the entire test run from Row 1 using default argument values.
The remaining 20 rows are marked with status Skipped and no logs are recorded.
Sections you finish are checked off in the contents.