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

У меня есть быстрый вопрос, который я не смог выяснить в документации по NMock 2.0.

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 14 декабря 2009

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

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

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

2 голосов
/ 11 июля 2011

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

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

Expect.Once.On(dao).Method("Save").With(new DontCare());
...