Delphi передает строку в процедуру, получает ошибку нарушения доступа

В настоящее время я пытаюсь создать процедуру теста и передать ей строку. И функция проверяет строку на эквивалентность. Проблема в том, что при запуске теста я получаю ошибку нарушения доступа EAccessViolation в строке, которую я передаю в процедуре. Я понимаю, что это проблема с декларацией памяти, но я не уверен, как ее исправить.

Вот мой код:

декларировать

TestTForm1 = class(TTestCase)
strict private
    FForm1: TForm1;
public
    procedure SetUp; override;
    procedure TearDown; override;
published
    procedure TestCompareListBoxToFile(Method : String);
end;

Вызов

TestCompareListBoxToFile('Save');

Процедура

procedure TestTForm1.TestCompareListBoxToFile(Method : String);  
begin
    Check('Save' = Method,'they dont match');
end;

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

1 ответ

Решение

Этот код вызывается исполнителем модульных тестов. Он использует RTTI для поиска опубликованных методов, имена которых начинаются с 'Test', На первый взгляд, это похоже на тестовый пример DUnit.

Бегун ожидает, что процедура не принимает параметров, и вызывает метод как таковой. Вы, с другой стороны, предоставляете метод, который требует параметр. Параметр, который не предоставлен. Отсюда ошибка во время выполнения.

Теперь где-то в вашем коде вы говорите, что вызываете метод следующим образом:

TestCompareListBoxToFile('Save');

Но это не то, как тесты вызываются. Тесты запускаются бегуном, который использует RTTI для этого. Если вы попытаетесь также вызвать функцию, это просто неправильно.

Вы должны объявить свой метод следующим образом:

procedure TestCompareListBoxToFile;

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

Другие вопросы по тегам