Это не особенно легко сделать с Moq, поскольку в нем нет понятия упорядоченных ожиданий. Однако вы можете использовать метод Callback и генерировать исключения оттуда, например так:
var actions = new Queue<Action>(new Action[]
{
() => { throw new Exception(); },
() => { }
});
var mock = new Mock<Mockee>();
mock.Setup(m => m.SetFalse()).Callback(() => actions.Dequeue()()).Verifiable();
try
{
mock.Object.SetFalse();
}
catch
{
mock.Object.SetFalse();
}
mock.Verify();
Однако одно предостережение заключается в том, что эта версия проверяет, был ли вообще вызван метод SetFalse.
Если вы хотите убедиться, что он был вызван дважды, вы можете изменить последний оператор на этот:
mock.Verify(m => m.SetFalse(), Times.Exactly(2));
Однако это слегка нарушает принцип СУХОГО, потому что вы бы указали один и тот же параметр дважды, но вы могли бы обойти это, сначала объявив и определив переменную типа Expression<Action<Mockee>>
и использовав ее как для Setup
, так и для Verify
методы ...