Я хочу протестировать следующий код:
foreach (CallQueueData queueData in _configurationProvider.CallQueues.Values)
{
_chimeManager.AddConfig(new ChimeConfigData(
ChimeKey.Create(ChimeType.CallQueue, queueData.Name));
if (queueData.LowChime != null)
{
_chimeManager.AddConfig(new ChimeConfigData(
ChimeKey.Create(ChimeType.QueueLowChime, queueData.Name));
}
if (queueData.HighChime != null)
{
_chimeManager.AddConfig(new ChimeConfigData(
ChimeKey.Create(ChimeType.QueueHighChime, queueData.Name));
}
}
Один из моих тестов выглядит следующим образом:
public void ShouldAddHighChimeConfigToChimeManager_IfServiceIsStarted_AndHighChimeIsConfigured()
{
// GIVEN
InitializeObjectUnderTestWithougStartingService();
var callQueueData = new CallQueueData
{
Name = "Emergency",
HighChime = new ChimeType(1, "High")
};
CallQueues.Add(callQueueData.Id, callQueueData);
// WHEN
_mgr.Startup();
// THEN
ChimeManager.AssertWasCalled(x => x.AddConfig(Arg<ChimeConfigData>.Matches(
y => y.Key == ChimeKey.Create(ChimeType.HighChime, callQueueData.Name))));
}
Проблема в том, что метод AddConfig в ChimeManager вызываетсянесколько раз, и я не хочу указывать, как часто он должен вызываться, прежде чем он будет соответствовать моему методу.
// i dont like this repeat twice because this ties the test code to much to the production code
ChimeManager.AssertWasCalled(x => x.AddConfig(Arg<ChimeConfigData>.Matches(
y => y.Key == ChimeKey.Create(ChimeType.HighChime, callQueueData.Name)),
y => y.Repeat.Twice));
Я бы хотел сказать что-то вроде:
ChimeManager.AssertWasCalled(x => x.AddConfig(Arg<ChimeConfigData>.Matches(
y => y.Key == ChimeKey.Create(ChimeType.HighChime, callQueueData.Name)),
y => y.Repeat.Any / y.Match.Any));
Unfortunatley Repeat.Any недопустим в этом случае, любой не существует Match.Any.
Как я могу утверждать, что этот метод вызывался с указанными аргументами, но не должно иметь значения, как часто он вызывается.Когда один из вызовов метода совпадает с указанными аргументами, утверждение не будет завершено.