C# 测试闭包
我有一个非常简单的方法,我正在尝试测试_interactionService会弹出一个对话框,要求用户确认是否删除该客户。如果在框上单击相应的按钮,则调用提供的操作。该操作操纵上下文并保存更改。保存完成后,将调用另一个操作C# 测试闭包,c#,unit-testing,moq,C#,Unit Testing,Moq,我有一个非常简单的方法,我正在尝试测试_interactionService会弹出一个对话框,要求用户确认是否删除该客户。如果在框上单击相应的按钮,则调用提供的操作。该操作操纵上下文并保存更改。保存完成后,将调用另一个操作 private void Delete(object entity) { _interactionService.ShowConfirmationBox("Delete?", "Are you sure you want to delete this cust
private void Delete(object entity)
{
_interactionService.ShowConfirmationBox("Delete?", "Are you sure you want to delete this customer?", () =>
{
Customer customer = entity as Customer;
Context.Attach(customer);
Context.Delete(customer);
Context.Save(() => DoSomethingElseWhenSaveComplete);
});
}
我不知道如何测试这个方法。我已经模拟了服务和上下文,但是如何测试闭包呢 如果上下文被模拟,那么您可以在测试中使用:
Action saveAction = null;
contextMock
.Setup(c => c.Save(It.IsAny<Action>())
.Callback<Action>(a => saveAction = a);
// Call delete...
Assert.IsNotNull(saveAction);
saveAction();
// Assert that DoSomethingElseWhenSaveCompleted was done
Action saveAction=null;
上下文模拟
.Setup(c=>c.Save(It.IsAny())
.Callback(a=>saveAction=a);
//呼叫删除。。。
Assert.IsNotNull(saveAction);
saveAction();
//断言DoSomethingelsWehensaveCompleted已完成
您应该在服务(API)级别而不是UI层进行测试。您试图通过测试实现什么
我的假设是第二,所以针对服务层和UI类编写一个测试。我不知道答案,我正在考虑。你不应该测试私有方法。为什么要使用
tdd
标记?可能应该使用单元测试