Workflow Foundation - Literal仅支持值类型和不可变类型System.String

pro*_*mba 7 workflow-foundation-4 c#-4.0

我对名为MyCodeActivity的WF代码活动进行了以下单元测试:

[ExpectedException(typeof(ArgumentException))]
[TestMethod]
public void ShouldRequireParam()
{
    //arrange
    var invoker = new WorkflowInvoker(new MyCodeActivity()
    {
        MyInt = 2,
        MyComplexObject = _complexObject
    });

    //act
    invoker.Invoke();

    //assert
    Assert.Fail("Expected ArgumentException");
}
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到以下异常

'Literal <MyComplexObject>':Literal仅支持值类型和不可变类型System.String.MyComplexObject类型不能用作文字.

pro*_*mba 12

解决眼前的问题:

MyComplexObject = _complexObject
Run Code Online (Sandbox Code Playgroud)

MyComplexObject = new InArgument<MyComplexObject>((ctx) => _complexObject)
Run Code Online (Sandbox Code Playgroud)

进一步阅读:http://msdn.microsoft.com/en-us/library/ee358749.aspx.

注意:您还应该使用NuGet上提供的Microsoft.Activities.UnitTesting包.它使IOC更容易(因为WF与服务定位器模式一起工作而不是依赖注入)