Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试闭包_C#_Unit Testing_Moq - Fatal编程技术网

C# 测试闭包

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

我有一个非常简单的方法,我正在尝试测试_interactionService会弹出一个对话框,要求用户确认是否删除该客户。如果在框上单击相应的按钮,则调用提供的操作。该操作操纵上下文并保存更改。保存完成后,将调用另一个操作

    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层进行测试。您试图通过测试实现什么

  • 您是否正在尝试确认您可以调用delete
  • 您正在尝试测试delete方法吗

  • 我的假设是第二,所以针对服务层和UI类编写一个测试。

    我不知道答案,我正在考虑。你不应该测试私有方法。为什么要使用
    tdd
    标记?可能应该使用
    单元测试