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);
        });
}

我不知道如何测试这种方法。我已经嘲笑了服务和上下文,但是如何测试闭包呢?

4

2 回答 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
于 2012-04-19T15:53:59.527 回答
0

您应该在服务 (API) 级别而不是 UI 层对此进行测试。你想用你的测试来达到什么目的?

  1. 您是否要确认可以调用删除

或者

  1. 您是否尝试测试删除方法

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

于 2012-04-19T16:16:38.387 回答