Вы можете проверить, вызывается ли метод с помощью метода Verify
. Если вызываемый метод ничего не возвращает, тогда вам не нужно Setup
. Я предпочитаю это, чем подход Setup или Expect / VerifyAll, так как это больше AAA.
[Test]
public void ShoudlCallMockMethod()
{
var mocked = new Mock<IDoStuff>();
var target = new ClassToTest(mocked.Object);
target.DoStuff();
mocked.Verify(x => x.CallMyMethod(It.IsAny<string>());
}
здесь ожидается, что вызов CallMyMethod
с любым аргументом. Если вы знаете точный аргумент и хотите это проверить, тогда выполните
mocked.Verify(x => x.CallMyMethod("exactstring"));
если вы хотите более сложное сопоставление того, что было передано (полезно для сложных объектов со многими аргументами), тогда посмотрите другой ответ, который я сделал с использованием средства сопоставления .
Вы также можете добавить Times.AtMostOnce (), если хотите, чтобы он вызывался только один раз
[Изменить]
Исходя из ваших правок и комментариев, вам не нужно макетировать объект args, но если вы все еще хотите проверить, установлены ли параметры, вы можете проверить это методом Client.SendAsync, при условии, что его можно смоделировать (что я бы сделал предложить вам стремиться к, если вы еще этого не сделали). Ссылка, которую я привел о совпадениях, должна помочь в этом.
Что касается вашего вопроса в вашем комментарии, то за последние несколько лет произошел сдвиг от записи / воспроизведения-проверки> ожидания / настройки-проверки> [настройки] -проверя. Это может быть связано с технологией насмешки, но в основном из-за введения лямбда-выражений в c # 3.5, а затем перехода на AAA. Что вам действительно нужно, так это небольшие читаемые тесты, которые следуют принципу AAA, так что Expect / Setup-VerifyAll действительно имеет утверждение в фазе Arrange (вы должны оглянуться назад, чтобы увидеть, что проверяется). Поэтому, если проверяемый метод не должен что-то возвращать, тогда вам не нужны установки, просто убедитесь, что метод был вызван на этапе подтверждения.