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