我打算只测试一个工作流程的一个序列(它不是一个单独的CodeActivity)。 有没有办法可以只调用所需的序列并传入所需的参数?
感谢您的关注。
答案 0 :(得分:2)
我通常做的是在几个子工作流程中拆分工作流程。
因此,您可以做的是创建一个活动,将此序列放入其中,然后在主工作流中替换它。之后,您可以单独测试它。
我希望它有所帮助。
答案 1 :(得分:1)
答案是:不,你不能。
至少效率不高。你可以用工作流的XAML做一堆思考。我想到了内部序列的提取,但请不要这样做!
如果您的序列使用在外部范围上分配的局部变量,那该怎么办?只有一个人认为在测试一个孤立的内部序列时会出错。
无论如何,你为什么要做那样的事情?这就像单元测试一个方法调用,它在另一个方法中。要么调用外部方法(工作流本身),要么隔离内部方法(序列)以便能够测试它。
修改强>
好的,如果你想继续使用它,并计算你拥有庞大的工作流程的XAML,也许你可以逃避这样的事情:
将XAML加载到活动:
var activity = ActivityXamlServices.Load("c:\hugeworkflow.xaml");
进行序列化活动,并计算出您知道内部序列的位置,在activity
内搜索它。让我们假设该序列在另一个序列(工作流根目录)中:
var rootSequence = activity as Sequence;
var innerSequence = rootSequence
.Activities
.FirstOrDefault(a => a is Sequence) as Sequence;
现在你可以像这样执行内部序列:
var arguments = new Dictionary<string, object>
{
{ "IntArgument", 10 },
{ "StringArgument", "hello world" }
};
WorkflowInvoker.Invoke(innerSequence, arguments);
我怎么能从序列中断言,我不知道。
没有测试过这些代码,所以可能会遗漏某些内容,但是你明白了。
答案 2 :(得分:0)
您可以使用codeplex中的Microsoft.Activities.UnitTesting
库对您的个人活动进行单元测试。 3}}和More documentation符合您的情况。
答案 3 :(得分:0)
您可以使用一种技术来实现这一目标,但这并不是非常简单。我们的想法是用模拟活动替换这一序列之外的所有其他活动,并使用Microsoft.Activities.UnitTesting项目调用工作流。
此链接here解释了我的意思
出于好奇,鉴于SOLID原则大量提倡接口隔离和单一责任,您是否认为将您称为原子单元(因此希望独立测试)的工作流段分离为单独的活动没有任何优点或儿童工作流程?