Подтвердить что ты не робот

Могу ли я использовать Moq, чтобы проверить, вызван ли метод издевательства со специальными значениями в комплексном параметре?

Итак, предположим, что я издеваюсь над следующим классом:

public class ClassAParams
{
    public int RequestedId { get; set; }
    public string SomeValue { get; set; }
}

public class ClassA
{
    public void ExecuteAction(ClassAParams executeParams) {}
}

Теперь скажите, что у меня есть еще один класс (пусть его называют ClassB), для которого я создаю модульное тестирование, и я хочу убедиться, что при вызове ClassB.Execute() этот ClassB вызывает ClassA.ExecuteAction(), но я хотите, чтобы параметр, вызываемый этим методом, имел значение ClassAParams.RequestedId 1.

Обычно я бы справился с этим, выполнив myMock.Verify(x => x.ExecuteAction(new ClassAParams { RequestedId = 1, SomeValue = "something" }));

Проблема заключается в том, что я не хочу проверять значение параметра SomeValue или любые другие ClassAParams свойства в этом unit test. Другие свойства будут проверяться в других модульных тестах, но для проверки того, что он вызвал правильные свойства в каждом unit test (даже если мне не все в порядке с конкретными модульными тестами), обслуживание устройства будет раздражать.

Можно ли использовать Moq для проверки того, что структура, которая передается в mocked-метод, имеет только определенные свойства в качестве определенного значения и игнорирует остальные?

4b9b3361

Ответ 1

Для mock.Verify существует перегрузка, которая позволяет вам что-то тестировать. Вот пример, который должен работать для вашего теста.

classA.Verify(
    a => a.ExecuteAction(
        It.Is<ClassAParams>(p => p.RequestedId == 12)
    )
);

Что означает "Для любого ClassAParams, переданного как аргумент, проверьте RequestId равно 12".