2015-04-07 5 views
0

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

Вот мой код:

Объявить

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; 

Я новичок в Дельфах, так что если есть что-то мне не хватает , позвольте мне kno ш. пожалуйста, укажите в ответе. Спасибо.

+0

Где вы заявляете процедуру 'TestCompareListBoxToFile'? (Я подозреваю, что это в DLL, что означает, что вы нарушаете стандартное правило «не передавайте строки в DLL, так как они не совместимы»). –

+0

сразу после TestTForm1 = class (TTestCase) –

+0

иметь смысл. Нет абсолютно никакого способа, чтобы AV передал код, который вы опубликовали. –

ответ

3

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

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

Теперь, где-то в вашем коде вы говорите, что вы вызываете метод, как это:

TestCompareListBoxToFile('Save'); 

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

Вы должны объявить метод как это:

procedure TestCompareListBoxToFile; 

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