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

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

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

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

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

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

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


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

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

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


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

Большое спасибо.
...
Рейтинг: 0 / 0
unit тестирование не public методов и функчий
    #40040333
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
unit тестирование не public методов и функчий
    #40040401
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...
...
Рейтинг: 0 / 0
unit тестирование не public методов и функчий
    #40040412
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...
+1
...
Рейтинг: 0 / 0
unit тестирование не public методов и функчий
    #40040575
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite
Какой смысл тестировать приватные методы, если важна корректность работы публичных?
Тестируйте публичные, они же используют приватные...

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

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

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

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

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

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

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


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