测试闭包

3

我有一个非常简单的方法,我正在尝试测试它。_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);
        });
}

我不知道怎样测试这个方法。我已经模拟了服务和上下文,但是如何测试这些闭包呢?


不知道答案,我正在思考。你不应该测试私有方法。 - Arialdo Martini
为什么要使用“tdd”标签?可能应该使用“单元测试”标签。 - Cristian Lupascu
2个回答

3
如果上下文被模拟,则您可以在测试中使用回调函数
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

0
你应该在服务(API)层进行测试,而不是UI层。你的测试目的是什么?
1. 你是想确认你可以调用删除吗? 2. 还是你是想测试删除方法?
我的假设是第二个,所以请针对服务层编写测试,而不是UI类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接