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());