Если вам нужно установить возвращаемое значение, а также проверить, сколько раз вы вызывали это выражение, можете ли вы сделать это в одном выражении?
Из того, что я могу собрать, Moq Setup (SomeExpression).Verifiable(), вызываемый вместе с Verify(), в основном выполняет Verify (SomeExpression, Times.AtLeastOnce)? т.е. verifys, выражение было вызвано только.
Вот пример, чтобы лучше объяснить вопрос. Для интерфейса:
interface IFoo
{
int ReturnSomething();
}
Являются ли следующие два эквивалентных блока (кроме первого, будут проверять все установки, помеченные как проверяемые)?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1).Verifiable();
mock.Verify();
}
и
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.AtLeastOnce());
}
Если бы я хотел проверить количество вызовов (скажем дважды), это единственный способ, когда выражение повторяется для установки и проверки?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.Exactly(2));
}
Мне просто не нравится называть Setup и Verify. Ну, так как это хорошая идея для AAA, перефразировать, мне не нравится повторять выражение для Setup и Verify. На данный момент я сохраняю выражение в переменной и передаю его каждому методу, но не чувствую себя таким чистым.
PS - контекст для этого - проверка теста при обновлении кеша (expirations и т.д.)