Nano Hash - криптовалюты, майнинг, программирование

форма delphi для вызова многих функций

Я создал библиотеку в delphi с помощью Embarcadero XE2 и хочу протестировать ее функции и процедуры, но их слишком много (более 50). Я хотел бы создать форму для тестирования этой моей библиотеки со списком функций слева (с вариантами, подобными дереву), а также с дополнительными текстовыми полями и кнопкой запуска справа от формы. Я нашел в Интернете несколько учебных пособий по древовидному представлению, но они визуализировали базы данных с помощью древовидного представления.

Treeview не нужен, любое возможное перечисление функций было бы здорово.

Есть ли простой способ протестировать столько функций? Есть ли более простой способ реализовать этот тест (форму)?

Моя библиотека как рефрактор для OpenOffice.org API, и она состоит в основном из процедур, а не функций, которые трудно протестировать с помощью фреймворка модульного тестирования, и было бы здорово создать графический интерфейс для тестирования этого класса, потому что я должен проверить вручную, как они работают. Есть ли решение для такого теста?


  • Похоже, вы собираетесь выполнить unit test? 30.05.2013
  • поместить его в разные таблицы 30.05.2013
  • похоже на дубликат? 30.05.2013

Ответы:


1

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

Тестирование должно быть повторяемым и всегда должно использовать как можно больше возможных вариантов тестирования, которые можно протестировать каждый раз, когда что-то меняется, чтобы убедиться, что вы не вносите ошибку (или не возвращаете ошибку, которую вы исправили ранее), и чтобы позволяют легко поддерживать новые опции, параметры или значения.

Вы должны использовать DUnit (модульное тестирование Delphi), включенное в Delphi для нескольких версий. (и доступен для более ранних версий на SourceForge), который позволяет автоматизировать процесс тестирования и включает TreeView, который показывает настройки тестов (называемые Suites), отдельные тесты, составляющие этот набор, и результаты каждого теста. Он позволяет тестировать то, что должно работать, и то, что не должно (и убедиться, что оно не работает), и постоянно повторять тесты, чтобы ничего не пропустить. Он также предоставляет информацию обо всех неудачных тестах, а также информацию, которая поможет найти (и устранить) причину сбоя.

В версиях Delphi, которые уже включают DUnit (что, как я полагаю, начинается с Delphi 2007 и более поздних версий), используйте File->New->Other->Unit Tests->Test Project для создания оболочки. Для тестирования, не основанного на классах, создайте еще один новый модуль и настройте тесты вручную. Вот вам оболочка для начала, с тестами для двух бессмысленных функций:

unit MyFunctionsTests;
{
  Delphi DUnit Test Case Skeleton Unit
}
interface

uses
  TestFramework, MyFunctions;

type
  // Test methods for MyFunctions unit
  // In the real world, you'd create separate test cases,
  // one for tests that should pass and one for tests that
  // should fail, and run them separately or in succession.
  // This is just a simple shell.
  TTestMyFunctions = class(TTestCase)
  strict private
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestFunctionOne;
    procedure TestFunctionTwo;
  end;

implementation

procedure TTestMyFunctions.Setup;
begin
  // Do any necessary initializations, set variables, etc.
end;

procedure TTestMyFunctions.TearDown;
begin
  // Free any objects, release any memory, etc. here
end;

procedure TTestMyFunctions.TestFunctionOne;
begin
  // FunctionOne takes two integers and adds them, and
  // returns the sum
  CheckTrue(FunctionOne(1, 1) = 2);  // Test success
  CheckFalse(FunctionOne(2, 2) = 5); // Test failure
end;

procedure TTestMyFunctions.TestFunctionTwo;
begin
  CheckEqualsString('AB', FunctionTwo('A', 'B')); // Success
  CheckFalse(FunctionTwo('B', 'A') = 'AB');       // Failure
end;

initialization
  // Register any test cases with the test runner
  RegisterTest(TTestMyFunctions.Suite);
end.

Используйте Project->Add to Project и добавьте свой модуль (MyFunctions.pas) и новый модуль тестового примера (MyFunctionTests.pas в приведенной выше оболочке). Это должно выглядеть примерно так:

program MyFunctionUnitTests;
{

  Delphi DUnit Test Project
  -------------------------
  This project contains the DUnit test framework and the GUI/Console test runners.
  Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
  to use the console test runner.  Otherwise the GUI test runner will be used by
  default.

}

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

uses
  DUnitTestRunner,
  MyFunctions in '..\MyFunctions.pas',
  MyFunctionsTests in 'MyFunctionsTests.pas';

{$R *.RES}

begin
  DUnitTestRunner.RunRegisteredTests;
end.

Теперь запустите проект и в появившемся окне нажмите зеленую кнопку Play (аналогично кнопке запуска в Delphi IDE) или нажмите F9. Древовидное представление покажет вам результаты тестов (зеленый — пройденный, красный — не пройденный). Если тест не пройден, вы можете просмотреть информацию об ошибке для этого теста в нижней части окна. (Если вы не можете, используйте окно View для отображения ошибок.)

30.05.2013
  • Спасибо за подробный ответ, я думаю, что это действительно полезно. Хотя у меня с этим проблемы. Я использую свою библиотеку в качестве рефрактора для OpenOffice.org API, и она состоит в основном из процедур, а не функций, которые трудно протестировать с помощью этой оболочки «Dunit», и поэтому я подумал, что было бы здорово создать графический интерфейс для тестирования. этот класс, потому что мне приходится вручную проверять, как они работают. Есть ли решение для такого теста? 02.06.2013
  • Я не понимаю вашего вопроса. Если процедура в вашем приложении может быть протестирована вами, как вы определите, сработала она или нет? Если вы можете определить успех или неудачу, скорее всего, есть способ автоматизировать это тестирование. Проверка вручную обычно означает, что вы сохраняете что-то успешное, а затем используете его для сравнения с автоматическим тестом, чтобы определить, проходит ли ваш тест или нет. 02.06.2013

  • 2

    Вместо этого используйте Дунит. Действительно, вы должны. Вот для чего это нужно. http://dunit.sourceforge.net/README.html

    Есть небольшая кривая обучения, но как только вы ее освоите, это будет «аааааа!»

    30.05.2013
  • Может, пора переходить на DUnit2? 30.05.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..