analizer
24.09.2011 06:38 mcabber
ещё никогда mock-объекты не были столь простыми и охуенными: https://github.com/analizer/ubermock
действующие лица:
launch — тестируемая либа
main — бинарь эту либу использующий
test — бинарь тестирующий тестируюему либу. т.к. я ленив, то состоит из того же исходника что и main
mock — либа, при линковке которой к test происходит подмена класса из launch и функции fopen, при определённых параметрах они теперь выдают свои заданные значения, ну, а если match'а не было — вызывают стандартную функцию.
З.Ы. ничто не мешает в mock-функции добавить проверку не только на параметр, но и на значения backtrace, и видоизменять каждую функцию персонально под каждый тест.
TOO TRICKY
это где это «too»? простой такой trick в mock для объекта и то его пришлось делать из-за костыльности языка, а в fopen.cpp вообще всё по честному
Вот оно и 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);
Трюкач вы, любезный.
я ж не виноват, что в позиксе просто отсутствует возможность загрузить указатель на одну мембер-функцию из шаред-либы? потому и сказал: «из-за костыльности языка»