суббота, 22 февраля 2014 г.

Тестируем калькулятор №2. Добавляем тест бизнес-логики через визуальные контролы

Предыдущая серия была тут - http://programmingmindstream.blogspot.ru/2014/02/1-dunit.html

Все исходники будут доступны тут - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/DraftsAndScketches/SomeTestProjects/DummyCalculator/Chapter2/

 Давайте теперь добавим ОДИН тест "бизнес-логики" в том виде в котором она есть.

Вот он:

Абстрактная часть:

unit CalculatorGUITest;

interface

uses
  TestFrameWork,
  MainForm
  ;

type
  TCalculatorGUITest = class(TTestCase)
   protected
    procedure VisitForm(aForm: TfmMain); virtual; abstract;
   published
    procedure DoIt;
  end;//TCalculatorGUITest

implementation

uses
  Forms
  ;

procedure TCalculatorGUITest.DoIt;
var
 l_Index : Integer;
begin
 for l_Index := 0 to Screen.FormCount do
  if (Screen.Forms[l_Index] Is TfmMain) then
  begin
   VisitForm(Screen.Forms[l_Index] As TfmMain);
   break;
  end;//Screen.Forms[l_Index] Is TfmMain
end;

end.

Конкретный тест:

unit PlusTest;

interface

uses
  CalculatorGUITest,
  MainForm
  ;

type
  TPlusTest = class(TCalculatorGUITest)
   protected
    procedure VisitForm(aForm: TfmMain); override;
  end;//TPlusTest

implementation

uses
  TestFrameWork,
  SysUtils
  ;

procedure TPlusTest.VisitForm(aForm: TfmMain);
const
 aA = 10;
 aB = 20;
begin
 aForm.Edit1.Text := IntToStr(aA);
 aForm.Edit2.Text := IntToStr(aB);
 aForm.Button1.Click;
 Check(StrToInt(aForm.Edit3.Text) = aA + aB);
end;

initialization
 TestFramework.RegisterTest(TPlusTest.Suite);

end.

По-моему тут всй предельно ясно.

Ищем главную форму приложения. Вбиваем текст в Edit1 и Edit2. Нажимаем кнопку сложения. Проверяем результат из Edit3.

5 комментариев:

  1. Получается каждая форма у нас как отдельный объект, какой она по сути и есть.
    Далее "вопрос как с ней связаться, и дать реальные данные. В данном случае их нет."
    Спасибо за демонстрацию.

    ОтветитьУдалить
    Ответы
    1. но как это с моим примером соотносится?
      я же в ПРИМЕРЕ тестирую УЖЕ созданные формы.. СОЗДАННЫЕ ЗАКОННЫМИ методами..
      это и ДРУГИХ примеров касается...

      если формы созданы ЗАКОННЫМИ МЕТОДАМИ, то они - ТЕСТИРУЕМЫ,..

      Удалить
    2. Если у Вас ЕСТЬ ПРОБЛЕМА - сделайте ОДИН ШАГ - задайте ПРЕДМЕТНЫЙ вопрос, про СВОИ формы и классы. Я думаю - я СМОГУ НА него ПРЕДМЕТНО ответить.

      Удалить
    3. я подозреваю чего вам не хватает :-) - Dependency Injection
      мы его ВОВСЮ применяем и для "инициализации форм" тоже
      но это пока лишь - "догадки"...

      Удалить
    4. "Пища для ума".. Процитирую сам себя:

      "Я последнее время говорю про Украину и ЗАКОННОСТЬ... Неожиданный разрез - про ЗАКОННОСТЬ в программировании, вот - http://programmingmindstream.blogspot.ru/2014/02/2.html?showComment=1393364099651#c6835117592870444331

      из той же "плоскости" кстати...

      Если что-то СДЕЛАНО ЗАКОННО, то оно - ПОДЛЕЖИТ ВАЛИДАЦИИ...

      Если что-то сделано "криво", то и ВАЛИДАЦИИ (читай тестированию) - оно "плохо подлежит"..."

      Удалить