NMock - как сказать, ожидать "любое значение" по этим параметрам? Или я не должен этого делать?

У меня есть быстрый вопрос, который я не мог понять в документах о NMock2.0.

У меня есть функция с именем Save(), которую я хочу макетировать. Это принимает идентификатор строки в качестве параметра и десятичное в качестве значения.

Я знаю, что могу написать это, чтобы убедиться, что Save() вызывается с двумя конкретными значениями:

    Expect.Once.On(dao) _
    .Method("Save").With(New Object() {"foo", 1})

Но это только проходит, если "foo" и 1 переданы. У меня есть контроль над значением "foo", но для второго значения я не знаю, что это будет; или мне не важно проверять, что это будет значить, по крайней мере, в этом конкретном тесте.

Я знаю, что могу написать:

    Expect.Once.On(dao) _
    .Method("Save").WithAnyArguments()

Но это позволит мне передать любые аргументы; так что если интерфейс Save изменится, а потом примет 5 параметров, мой тест все равно пройдет.

Как я могу убедиться, что он принимает только 2 параметра с их соответствующими типами?

Возможно, еще важнее - слишком ли хрупко писать такой тест? Может быть, я должен написать код, чтобы ожидать каких-либо параметров, чтобы при каждом рефакторинге мне не приходилось возвращаться и менять эту строку? Я обнаружил, что мои тестовые сценарии, в которых используется множество макетов, очень хрупкие, и каждый раз, когда я выполняю рефакторинг, мне приходится их менять... Может быть, я здесь неправильно использую макеты? Все еще довольно плохо знакомы с этим материалом, поэтому любые советы очень ценятся.

2 ответа

Решение

Использовать Is.TypeOf() matcher, чтобы соответствовать определенному типу без учета его значения. Вы хотите что-то вроде:

Expect.Once.On(dao).Method("Save").With(Is.TypeOf(typeof(string)));

Что касается того, разумно это или нет, я бы сказал, что это нормально в общем случае, если вы пытаетесь проверить, что метод может работать с параметрами своих указанных типов ввода. Например, скажем, вы проходите в Car к методу, который ожидает Vehicle; будет полезно убедиться, что метод может правильно обрабатывать производные типы.

Вы можете создать простой класс:

class DontCare
{
    public override bool Equals(object obj)
    {
        return true;
    }
}

Expect.Once.On(dao).Method("Save").With(new DontCare());
Другие вопросы по тегам