Как я могу проверить функции и процедуры, поскольку они не принадлежат классам в Delphi?
-
27-10-2019 - |
Вопрос
У меня есть несколько небольших функций в старом блоке под названием Utils.pas
.
Теперь я хотел бы рефакторировать некоторые из них, но я думаю, что лучше написать тест раньше. С дюнитом я думаю, что это невозможно без класса.
Итак, я хотел бы знать, как я могу проверить их до рефакторинга?
Редактировать:
Я думал, что это невозможно, потому что я пытался добавить тестовый пример в Delphi, используя мастер тестового примера. Посмотрите на картинку, что нет каких -либо классов и методов, поэтому я не могу его создать.
Решение
Вы не можете проверить отдельную функцию, используя мастер, но не проблема проверить отдельную функцию с Dunit.
Пример
//***** A Standalone function te be tested in a unit far, far away
function Add(v1, v2: Integer): Integer;
...
//***** A testclass to contain the testmethods calling our
// standalone function
TTestAdd = class(TTestcase)
published
procedure AddingComplement_ShouldEqualZero;
procedure AddingNegativeNumbers_ShouldBeLessThanZero
...
end;
implementation
procedure TTestAdd.AddingComplement_ShouldEqualZero;
begin
// Setup, Execute & Verify
CheckEquals(0, Utils.Add(-1, 1), 'Complement doesn''t add to zero');
end;
procedure TTestAdd.AddingNegativeNumbers_ShouldBeLessThanZero
begin
// Setup, Execute & Verify
CheckEquals(-3, Utils.Add(-1, -2), 'Add doesn''t add');
end;
Другие советы
Afaict, Dunit не требует, чтобы тест -тест был в качестве методов класса. Сами только тестовые случаи должны быть занятия.
РЕДАКТИРОВАТЬ: Волшебник - это просто удобство. Вам не нужно его использовать.
Реальный код должен поддерживать. Реальный код имеет предположения, которые не хорошо документированы. Реальный код изменяется людьми, которые забывают или никогда не знали эти предположения. Доверьтесь тестам, не доверяйте коду.
Real TDD позволяет создавать объект и его методы перед реализацией. Вам нужна четкая модель, прежде чем вы сможете написать тестовый пример в любом случае.
Таким образом, генерируйте объект (ы), добавьте методы, параметры и т. Д. Вероятно, использование UML2 будет лучше, а затем напишите тестовые примеры для них, а затем реализовать объекты. После этого запустите Profiler и узнайте, насколько ужасен ваш код, и рефактор.
Как общее решение, почти всегда лучше написать заводский объект для создания экземпляра и инициализации ваших объектов. Чем ближе вы приближаетесь к основной функциональности, тем больше это становится важно.
Напишите тесты для ваших ожидаемых неудач и исключений. Используйте чек, чтобы убедиться.
Наконец, напишите каждый тест и посмотрите, как он не работает, прежде чем написать код, чтобы он добился успеха.