Параметры рефакторинга и юнит-тесты - PullRequest
2 голосов
/ 20 декабря 2008

У меня есть этот метод:

public bool CanExecute()

И после 70 коммитов я добавил дополнительный параметр

public bool CanExecute(IStation target)

Теперь проблема в том, что у меня есть 7 модульных тестов, охватывающих методы CanExecute, тестирующие различные комбинации значений null / свойства.

Добавление этого простого параметра потребовало исправления этих 7 модульных тестов. Исправить это просто, но ...

Есть ли передовая практика и / или шаблон, позволяющий избежать такого рода рефакторинга, необходимого для обновления модульных тестов?

Предположим, я знаю, что в ближайшем будущем может быть добавлен дополнительный параметр. Как бы я написал код модульного теста, чтобы учесть это? Это просто перебор или есть идиома / шаблон / что-то, чтобы следовать?

РЕДАКТИРОВАТЬ: Я не мог просто добавить перегрузку, потому что зависимость IStation не является обязательным. Я исправлял ошибку, когда ожидался экземпляр IStation, но ни один не был доступен, поэтому он должен быть предоставлен через CanExecute ... вы видите.

Инструменты рефакторинга, кажется, путь. Спасибо!

Ответы [ 4 ]

9 голосов
/ 20 декабря 2008

Не могли бы вы оставить оба метода в коде? Если параметр IStation не должен быть ненулевым, вы можете обойтись без изменения существующего кода.

В качестве альтернативы, если параметр имеет разумное значение по умолчанию (опять же, как ноль!), Resharper может очень легко позаботиться о подобных изменениях. Чтобы добавить новый параметр, щелкните правой кнопкой мыши имя функции и выберите «Изменить подпись ...». Здесь вы можете добавить новые параметры с допустимыми значениями по умолчанию. RS обновит все вызовы, поэтому вам не нужно!

1 голос
/ 20 декабря 2008

Если вы знаете, что метод, скорее всего, снова изменится, я думаю, разумно будет перегрузить метод и добавить модульные тесты для перегруженных элементов вместо замены старых модульных тестов. Если звезды совпадают для вас, вы можете даже обнаружить, что перегруженные методы вызывают оригинальный метод no-arg, поэтому вам нужно только написать тесты для новых параметров, а не повторять исходные семь тестов.

1 голос
/ 20 декабря 2008

Вам, конечно, нужно подумать, не дублируете ли вы слишком много функций в своих модульных тестах, но это не всегда так.

Довольно много современных IDE (resharper для C #) поддерживают рефакторинг «метод изменения», который позволяет вам предоставлять значения по умолчанию для новых параметров. Я считаю, что эта функция рефакторинга действительно полезна для мастера.

0 голосов
/ 20 декабря 2008

Я бы оставил оба. Перегрузите метод и добавьте модульные тесты для новых перегруженных методов, чтобы охватить то, что вы только что добавили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...