2012-05-02 13 views
8

Tôi đã tạo hoạt động được mã hóa và bây giờ tôi muốn đơn vị kiểm tra nó, nhưng tôi không biết làm thế nào. Bất kỳ ví dụ nào sẽ được đánh giá cao.Kiểm tra đơn vị hoạt động mã WF

Ví dụ đơn giản của tôi là bên dưới.

public sealed class ParameterActivity : CodeActivity 
{ 
    public InArgument<int> Argument1 { get; set; } 
    public InArgument<int> Argument2 { get; set; } 
    public OutArgument<int> Result { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     var a = context.GetValue(Argument1); 
     var b = context.GetValue(Argument2); 

     context.SetValue(Result, a + b); 
    } 
} 
+0

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

+0

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

+0

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

Trả lời

17

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.

+1

Hãy chắc chắn xem xét Làm cách nào để sử dụng Microsoft.Activities.UnitTesting? http://wf.codeplex.com/wikipage?title=How%20do%20I%20use%20Microsoft.Activities.UnitTesting&referringTitle=Microsoft.Activities.UnitTesting%20Overview –