Trước hết, trong trường hợp hoạt động của bạn trả về một giá trị duy nhất, chỉ cần kế thừa từ CodeActivity<TResult> và dễ dàng ghi đè Execute() với TResult như kiểu trả về. Ngoài ra, bạn đã có sẵn OutArgument<TResult> Result.
public sealed class ParameterActivity : CodeActivity<int>
{
public InArgument<int> Argument1 { get; set; }
public InArgument<int> Argument2 { get; set; }
protected override int Execute(CodeActivityContext context)
{
var a = Argument1.Get(context);
var b = Argument2.Get(context);
return a + b;
}
}
Điều đó đang được nói, WorkflowInvoker là con đường để đi đến đơn vị kiểm tra hầu hết các hoạt động của bạn. Lấy trên hoạt động mã tùy chỉnh làm ví dụ:
[TestFixture]
public TParameterActivity
{
[Test]
public void ParameterActivity_Test001()
{
var activity = new ParameterActivity();
var input1 = new Dictionary<string, object>
{
{ "Argument1", 10 },
{ "Argument2", 5 }
};
var input2 = new Dictionary<string, object>
{
{ "Argument1", -13 },
{ "Argument2", 3 }
};
var output1 = WorkflowInvoker.Invoke<int>(activity, input1);
var output2 = WorkflowInvoker.Invoke<int>(activity, input2);
Assert.That(output1, Is.EqualTo(15));
Assert.That(output2, Is.EqualTo(-10));
}
}
Thay vì WorkflowInvoker bạn cũng có thể sử dụng WorkflowApplication nhưng đối với đơn vị kiểm nghiệm điều đó dường như không phải ở tất cả các cần thiết khi bạn chỉ muốn nhanh chóng gọi công việc ngắn ngủi để họ làm "điều họ" và trở về. Trừ khi bạn muốn thử nghiệm các công cụ phức tạp hơn như luồng công việc không đồng bộ và/hoặc dấu trang.
Bạn cũng sẽ muốn kiểm tra Microsoft.Activities.UnitTesting.
tôi đã tìm thấy liên kết này hữu ích: http://daysincode.blogspot.co.uk/2012/05/unit-test-of-workflow-for-code-action.html – cpoDesign
Về cơ bản, đó là suy nghĩ tương tự mà tôi đã cho bạn thấy trong câu trả lời của tôi. Chỉ cần sử dụng 'CodeActivity' cho các hoạt động có giá trị trả lại duy nhất. Hầu hết làm. Sau đó, bạn có thể dễ dàng sử dụng 'WorkflowInvoker.Invoke ()' để nhận giá trị –
Joao
Chúng cũng dễ dàng hơn để kiểm tra đơn vị, như bạn có thể thấy bằng sự khác biệt giữa mã của tôi với mã của bài đăng trên blog. – Joao