问题
I have the following unit test for a WF code activity called MyCodeActivity:
[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");
}
When I run the test I get the following exception
'Literal< MyComplexObject>': Literal only supports value types and the immutable type System.String. The type MyComplexObject cannot be used as a literal.
回答1:
To fix the immediate problem:
MyComplexObject = _complexObject
to
MyComplexObject = new InArgument<MyComplexObject>((ctx) => _complexObject)
Further reading : http://msdn.microsoft.com/en-us/library/ee358749.aspx .
Note: You should also use the Microsoft.Activities.UnitTesting package available on NuGet. It makes IOC alot easier (seeing as WF works with the Service Locator pattern and not Dependency Injection)
来源:https://stackoverflow.com/questions/16554084/workflow-foundation-literal-only-supports-value-types-and-the-immutable-type-s