analizer 24.09.2011 06:38 mcabber

ещё никогда mock-объекты не были столь простыми и охуенными: https://github.com/analizer/ubermock
действующие лица:
launch — тестируемая либа
main — бинарь эту либу использующий
test — бинарь тестирующий тестируюему либу. т.к. я ленив, то состоит из того же исходника что и main
mock — либа, при линковке которой к test происходит подмена класса из launch и функции fopen, при определённых параметрах они теперь выдают свои заданные значения, ну, а если match'а не было — вызывают стандартную функцию.

З.Ы. ничто не мешает в mock-функции добавить проверку не только на параметр, но и на значения backtrace, и видоизменять каждую функцию персонально под каждый тест.

1. DZhon 24.09.2011 07:33

TOO TRICKY

2. analizerDZhon /1 24.09.2011 07:39 mcabber

это где это «too»? простой такой trick в mock для объекта и то его пришлось делать из-за костыльности языка, а в fopen.cpp вообще всё по честному

3. DZhonanalizer /2 24.09.2011 07:41 Псишечка

Вот оно и tricky:

typedef int (*symbol)(const TLaunch*, int i);
symbol sym = reinterpret_cast<symbol>(dlsym(RTLD_NEXT,
NReinventedWheels::GetCurrentFrame().Symbol_.c_str()));
return sym(this, i);

Трюкач вы, любезный.

4. analizerDZhon /3 24.09.2011 07:46 mcabber

я ж не виноват, что в позиксе просто отсутствует возможность загрузить указатель на одну мембер-функцию из шаред-либы? потому и сказал: «из-за костыльности языка»

Do you really want to delete ?