Могу ли я вызвать ToolsAPI из кода в DUnit GUITestrunner?

Есть ли способ инициализировать глобальную переменную BorlandIDEServices в модуле ToolSAPI, чтобы ее можно было использовать из кода DUnit GUITestrunner?

procedure TGUITestRunner.FailureListViewClick(Sender: TObject);
var
  Project: IOTAProject;
begin
  if FailureListView.Selected <> nil then
  begin
    TestTree.Selected := TTreeNode(FailureListView.Selected.data);

    // call OTA
    Project := ToolsAPI.GetActiveProject;
    ShowMessage(Project.ProjectType);

  end;
end;

В этом примере переменная Project будет нулевой, поскольку переменная BorlandIDEServices не инициализирована. GUITestrunner запускается из среды IDE в режиме отладки.


person mjn    schedule 09.09.2011    source источник


Ответы (2)


Нет, потому что BorlandIDEServices доступен только из кода, фактически работающего внутри (как часть) самой IDE. Код, выполняемый во внешних приложениях через отладчик, по-прежнему выполняется извне; они не являются частью IDE, несмотря на то, что отладчик входит в нее, и поэтому не имеют доступа к функциям ToolsAPI.

Такие инструменты, как GExperts, фактически подключаются к IDE и становятся ее частью, поэтому они могут получить доступ к ToolsAPI интерфейсам. Это не относится к GUITestRunner; это внешнее приложение независимо от того, работает оно под отладчиком или нет.

person Ken White    schedule 09.09.2011

Единственный способ, который я могу себе представить (не проверял), потребует плагина OTA, который взаимодействует с GUITestrunner через какое-то межпроцессное взаимодействие.

Например, плагин открывает сокет и получает команды типа «открыть файл SomeTests.pas в редакторе» из приложения GUITestrunner.

person mjn    schedule 09.09.2011
comment
Или вы можете напрямую включить DUnit в плагин, выполнять тесты в форме (присоединяемой) непосредственно из IDE. - person Ondrej Kelle; 09.09.2011
comment
Я всегда хотел, чтобы DUnit Exe перенаправлял результаты теста в плагин DUnit, отображая их в окне инструментов. Использование DUnit DLL (и загрузка в адресное пространство Delphi) чревато опасностью и может убить Delphi, если ваши тесты будут плохими. - person Nat; 10.09.2011