Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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#_.net_Unit Testing_Events_Delegates - Fatal编程技术网

C# 如何访问调用代理的次数?

C# 如何访问调用代理的次数?,c#,.net,unit-testing,events,delegates,C#,.net,Unit Testing,Events,Delegates,我目前正在为一项功能编写测试。我需要计算事件处理程序被调用的次数。在本例中,我希望确保从未调用委托“failureHandler” 通过调用Assert.Fail(),我已经从测试的角度实现了我想要的。不过,我想做的是计算在测试的其他部分中调用委托的次数 我相信我在某个地方读到过,你可以通过酒店获取这些信息,但我不记得在哪里读到过 Action failureHandler = completed => Assert.Fail("Not all tasks

我目前正在为一项功能编写测试。我需要计算事件处理程序被调用的次数。在本例中,我希望确保从未调用委托“failureHandler”

通过调用Assert.Fail(),我已经从测试的角度实现了我想要的。不过,我想做的是计算在测试的其他部分中调用委托的次数

我相信我在某个地方读到过,你可以通过酒店获取这些信息,但我不记得在哪里读到过

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

_testObj.TaskCompletedForItems += failureHandler;

不,这没有标准属性。。。但您可以很容易地使用lambda表达式是闭包这一事实来模拟它:

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

_testObj.TaskCompletedForItems += handler;
// Do stuff

Assert.AreEqual(expectedCount, callCount);

不,这没有标准属性。。。但您可以很容易地使用lambda表达式是闭包这一事实来模拟它:

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

_testObj.TaskCompletedForItems += handler;
// Do stuff

Assert.AreEqual(expectedCount, callCount);
您可以使用并验证该操作已被调用多少次:

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());
Mock mockAction=new Mock();
Action=mockAction.Object;
//号召行动
动作();
//验证从未调用过它
mockAction.Verify(act=>act(),Times.Never());
//或者验证是否只调用了一次
mockAction.Verify(act=>act(),Times.Once());
您可以使用并验证该操作被调用了多少次:

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());
Mock mockAction=new Mock();
Action=mockAction.Object;
//号召行动
动作();
//验证从未调用过它
mockAction.Verify(act=>act(),Times.Never());
//或者验证是否只调用了一次
mockAction.Verify(act=>act(),Times.Once());

您确定没有将其与
GetInvocationList()
混淆吗?我不确定不自己做就可以数数;-)您确定没有将其与
GetInvocationList()
混淆吗?我不确定不自己做就可以数数;-)谢谢,我相信这个答案最准确地回答了我的问题。我建议大家参考dcastro的答案,以获得一个更灵活、更优雅的解决方案,用于使用Moq框架的单元测试。谢谢,我相信这个答案最准确地回答了我的问题。我建议大家参考dcastro的答案,以获得使用Moq框架进行单元测试的更灵活、更优雅的解决方案。感谢这个答案,我从未考虑过模仿一个动作——这使测试变得非常干净!谢谢你的回答,我从来没有想过嘲弄一个动作——这是一个非常干净的测试!