Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / unit тестирование не public методов и функчий / 17 сообщений из 17, страница 1 из 1
30.01.2021, 22:08
    #40040174
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Всем привет,

столкнулся с ситуацией когда тестировать надо приватные методы и функции классов.
В TestFramework включённый в последнии версии Delphi такой возможности не нашел. Там можно только паблики тестировать.
Как быть в такой ситуации? что посоветуете?

Спасибо
...
Рейтинг: 0 / 0
30.01.2021, 22:34
    #40040178
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Приватные, они на то и приватные, что к ним доступа извне нет
...
Рейтинг: 0 / 0
30.01.2021, 23:39
    #40040186
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Оберни необходимое в тестовый дифайн с повышением области видимости
...
Рейтинг: 0 / 0
31.01.2021, 04:31
    #40040208
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Можно еще скопипастить интерфейс класса c новым именем, и сделать там все пабликом, не меняя порядка содержимого.

А дальше unsafe приведение типов - и profit!

Так не обязательно корежить основной код уродливыми дефайнами.
...
Рейтинг: 0 / 0
31.01.2021, 14:44
    #40040249
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Ещё можно интерфейсы использовать.
...
Рейтинг: 0 / 0
31.01.2021, 17:58
    #40040276
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Не проще ли через rtti вытащить, если уж так припёрло?
...
Рейтинг: 0 / 0
31.01.2021, 18:34
    #40040281
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Kazantsev Alexey,

А через RTTI можно к привату обращатся?
...
Рейтинг: 0 / 0
31.01.2021, 18:43
    #40040282
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
rgreat,

По дефолту нельзя (хотя к полям можно и по дефолту), но этот вопрос решается одной директивой.
...
Рейтинг: 0 / 0
31.01.2021, 21:00
    #40040321
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
GunSmoker
Ещё можно интерфейсы использовать.


можно какой то маленький пример?
Не пойму саму идею как используя интерфейс у класса (у которого изначально таковых не было) повысить видимость его методов.
Думаю это интересно будет не только мне.

Спасибо
...
Рейтинг: 0 / 0
31.01.2021, 21:01
    #40040322
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Kazantsev Alexey
rgreat,

По дефолту нельзя (хотя к полям можно и по дефолту), но этот вопрос решается одной директивой.


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

Большое спасибо.
...
Рейтинг: 0 / 0
31.01.2021, 22:10
    #40040333
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
hlopotun,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.Rtti;

type

 {$RTTI EXPLICIT METHODS(DefaultFieldRttiVisibility)}
 TMyClass = class
  strict private
   procedure SayHello(const someParam : string);
  public
 end;

{ TMyClass }

procedure TMyClass.SayHello(const someParam : string);
begin
 writeLn('hello, ', someParam);
end;

begin

 var obj := TMyClass.Create;

 TRttiContext.Create.GetType(TMyClass).GetMethod('SayHello').Invoke(obj, ['kitty']);

 obj.Free;

 readLn;

end.
...
Рейтинг: 0 / 0
01.02.2021, 10:58
    #40040401
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...
...
Рейтинг: 0 / 0
01.02.2021, 11:36
    #40040412
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
X-Cite
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...
+1
...
Рейтинг: 0 / 0
01.02.2021, 16:39
    #40040575
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
X-Cite
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...

Иногда это проще. Например, если наружу торчит только "отправь запрос к серверу, пережуй его и верни результат", а внутри тонны функций.
Я делаю дефайнами:
{$IFDEF TEST}protected{$ELSE}strict private{$ENDIF}
- это будет единственная меняющаяся строка для каждого класса, без особого уродства.
Вот с внутренними типами уже сложнее.

Но в целом надо стараться минимизировать тестирование кишок.
...
Рейтинг: 0 / 0
01.02.2021, 17:04
    #40040591
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
Fr0sT-Brutal
Но в целом надо стараться минимизировать тестирование кишок.

Это почему?
...
Рейтинг: 0 / 0
01.02.2021, 19:11
    #40040648
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
ъъъъъ
Это почему?

Потому что по-хорошему что торчит наружу - то и надо тестировать, в случае изменений внутреннего устройства меньше переделывать. У меня было исключение из этого правила в утилитных функциях и классах, которые выставлять наружу не нужно, а проверять через внешний интерфейс слишком муторно
...
Рейтинг: 0 / 0
01.02.2021, 23:14
    #40040735
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unit тестирование не public методов и функчий
hlopotun
столкнулся с ситуацией когда тестировать надо приватные методы и функции классов

Если речь идёт не о глубоко системном коде, то 99% что это напрасная трата времени.

hlopotun
Как быть в такой ситуации? что посоветуете?

Иногда, когда тестам нужен специфический доступ куда-то глубоко внутрь, я завожу метод типа __ut__dosomething, предназначенный только и именно для них. Этого хватает.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / unit тестирование не public методов и функчий / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]