你如何访问代表被调用的次数?

时间:2014-06-12 08:47:45

标签: c# .net unit-testing events delegates

我目前正在为一项功能编写测试。我需要计算调用事件处理程序的次数。在这个例子中,我想确保永远不会调用委托'failureHandler'。

如果调用了Assert.Fail(),我已经从测试角度实现了我想要的东西。我想要做的是计算代表被调用以在测试的其他部分中使用的次数。

我相信我读到的地方你可以通过财产访问这些信息,但我不记得我在哪里阅读它了!

Action failureHandler = 
                completed => Assert.Fail("Not all tasks have been completed");

_testObj.TaskCompletedForItems += failureHandler;

2 个答案:

答案 0 :(得分:2)

不,没有标准属性......但是你可以很容易地使用lambda表达式来模拟它的事实:

int callCount = 0;
Action handler = () => callCount++;

_testObj.TaskCompletedForItems += handler;
// Do stuff

Assert.AreEqual(expectedCount, callCount);

答案 1 :(得分:2)

您可以使用MOQ,并验证操作被调用的次数:

Mock<Action> mockAction = new Mock<Action>();
Action action = mockAction.Object;

//call action
action();

//verify that it was never called
mockAction.Verify(act => act(), Times.Never());

//or verify that it has been called exactly once
mockAction.Verify(act => act(), Times.Once());
相关问题