C# 如何为Silverlight单元测试创建InvokeOperation?
我正在尝试为我的单元测试模拟DomainContext调用 我的真实代码是:C# 如何为Silverlight单元测试创建InvokeOperation?,c#,silverlight,unit-testing,C#,Silverlight,Unit Testing,我正在尝试为我的单元测试模拟DomainContext调用 我的真实代码是: public class SomeDomainService : LinqToSqlDomainService<SomeDataContext> { [Invoke] public bool CodeIsUnique(string code) { return !this.DataContext.Objects.Any(o => string.Compare(o
public class SomeDomainService : LinqToSqlDomainService<SomeDataContext>
{
[Invoke]
public bool CodeIsUnique(string code)
{
return !this.DataContext.Objects.Any(o => string.Compare(o.Code, code, true) == 0);
}
}
因此,我创建了一个模拟实现,它不会进入服务器:
public InvokeOperation<bool> CodeIsUnique(string code, Action<InvokeOperation<bool>> action, object userState)
{
bool isUnique = !_list.Any(o => string.Compare(o.Code, code) == 0);
InvokeOperation<bool> op = ?????; // Here's the problem
action.Invoke(op);
return op;
}
这可以通过本地列表和调用action.Invoke工作,但是调用中只有null,视图模型代码就会失败,因为op显然是null
所以我需要做的是创建一个InvokeOperation类型的对象,并将.Value属性设置为isUnique。然而,我不知道该如何解决这个问题。在第一个实例中,.Value属性是只读的,而在第二个实例中,没有用于InvokeOperation的公共创建者
如果可以的话,我真的不想在我的测试web项目中创建测试域服务。好的,我用另一种方式解决了这个问题。我没有试着传递调用操作,而是将其重新编码为:
public void CodeIsUnique(string code, Action<bool, Exception> action)
{
return ObjectContext.CodeIsUnique(code, op =>
{
if (op.HasError)
{
action(false, op.Error);
op.MarkErrorAsHandled();
}
else
{
action(op.Value, null);
}
}, null);
}
测试代码可以是:
public void CodeIsUnique(string code, Action<bool, Exception> action)
{
bool isUnique = !_list.Any(o => string.Compare(o.Code, code) == 0);
action(isUnique, null);
}
因此,代码按预期工作,我不需要创建InvokeOperation
public void CodeIsUnique(string code, Action<bool, Exception> action)
{
return ObjectContext.CodeIsUnique(code, op =>
{
if (op.HasError)
{
action(false, op.Error);
op.MarkErrorAsHandled();
}
else
{
action(op.Value, null);
}
}, null);
}
this.ObjectInterface.CodeIsUnique(currentObject.Code, (result, error) =>
{
if (error != null)
{
// Deal with error
}
else if (!result)
{
// Code is not unique set error state.
}
}
public void CodeIsUnique(string code, Action<bool, Exception> action)
{
bool isUnique = !_list.Any(o => string.Compare(o.Code, code) == 0);
action(isUnique, null);
}