Как я могу проверить функции и процедуры, поскольку они не принадлежат классам в Delphi?

StackOverflow https://stackoverflow.com/questions/6342683

Вопрос

У меня есть несколько небольших функций в старом блоке под названием Utils.pas.

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

Итак, я хотел бы знать, как я могу проверить их до рефакторинга?

Редактировать:

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

enter image description here

Это было полезно?

Решение

Вы не можете проверить отдельную функцию, используя мастер, но не проблема проверить отдельную функцию с 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 и узнайте, насколько ужасен ваш код, и рефактор.

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

Напишите тесты для ваших ожидаемых неудач и исключений. Используйте чек, чтобы убедиться.

Наконец, напишите каждый тест и посмотрите, как он не работает, прежде чем написать код, чтобы он добился успеха.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top