Unit testing Rhino Mock断言任何调用都与预期参数匹配

Unit testing Rhino Mock断言任何调用都与预期参数匹配,unit-testing,mocking,rhino-mocks,Unit Testing,Mocking,Rhino Mocks,我想测试以下代码: foreach(configurationProvider.CallQueues.Values中的CallQueueData queueData) { _chimeManager.AddConfig(新的ChimeConfigData( Create(ChimeType.CallQueue,queueData.Name)); if(queueData.lowcime!=null) { _chimeManager.AddConfig(新的ChimeConfigData( Cre

我想测试以下代码:

foreach(configurationProvider.CallQueues.Values中的CallQueueData queueData)
{
_chimeManager.AddConfig(新的ChimeConfigData(
Create(ChimeType.CallQueue,queueData.Name));
if(queueData.lowcime!=null)
{
_chimeManager.AddConfig(新的ChimeConfigData(
Create(ChimeType.QueueLowChime,queueData.Name));
}
if(queueData.HighChime!=null)
{
_chimeManager.AddConfig(新的ChimeConfigData(
Create(ChimeType.QueueHighChime,queueData.Name));
}
}
我的一个测试如下所示:

public void应将HighChimeConfig添加到管理员(如果服务已启动)和HighChimeIsConfigured()
{
//给定
使用ougstartingservice()初始化ObjectAnderTest;
var callQueueData=新的callQueueData
{
Name=“紧急情况”,
HighChime=新的蜂鸣音类型(1,“高”)
};
添加(callQueueData.Id,callQueueData);
//什么时候
_经理启动();
//然后
调用了ChimeManager.Assertwas(x=>x.AddConfig(Arg.Matches(
y=>y.Key==ChimeKey.Create(ChimeType.HighChime,callQueueData.Name));
}
这里的问题是ChimeManager的AddConfig方法被多次调用 我不想指定在它匹配我的方法之前必须调用它的频率

//我不喜欢重复两次,因为这会将测试代码与生产代码联系在一起
调用了ChimeManager.Assertwas(x=>x.AddConfig(Arg.Matches(
y=>y.Key==ChimeKey.Create(ChimeType.HighChime,callQueueData.Name)),
y=>y.重复两次);
我想说的是:

ChimeManager.AssertWasCalled(x=>x.AddConfig(Arg.Matches(
y=>y.Key==ChimeKey.Create(ChimeType.HighChime,callQueueData.Name)),
y=>y.Repeat.Any/y.Match.Any);
不幸的是,重复。在这种情况下,Any无效,Any不匹配。Any


如何断言此方法是使用指定的参数调用的,但无论调用频率如何。当对该方法的一个调用与指定的参数匹配时,断言不会失败。

而不是编写测试来验证该方法的实现(随着时间的推移会变得脆弱),编写一个测试以验证方法的结果。在这种情况下,您似乎希望确保已正确填充\u chimeManager


如果您编写的测试只是发送一些数据,然后验证结果,那么单元测试不太可能随着时间的推移而中断。假设在将来的某个时候,通过数据库调用或其他方法(而不是通过Add方法)填充_chimeManager?如果您针对实现编写测试,您的测试将中断。但是,如果您编写测试只是为了确保在给定特定输入的情况下,正确填充了_chimeManager,那么您的测试不会随着“如何”的更改而中断。

好,这意味着我应该使用“真实”在这个场景中使用ChimeManager,而不是模拟的,然后断言ChimeManager配置。嗯,因为它是一个注入依赖项,我想我应该模拟它,但我喜欢这种新方法。thx