analizer 22.09.2011 06:38 mcabber

и ещё по теме вопрос. mock форсирует наличие vtbl, есть ли техники, которые позволят в релизном билде от этой vtbl избавиться? просто тянуть виртуальные вызовы в высоконагруженный класс только ради тестирования — перебор.

1. DZhon 22.09.2011 06:52

Макросы, макросы. Перед классом дефайнить, за классов андефайнить и молиться.
Либо по заветам сами знаете кого в мире С++ : http://en.wikipedia.org/wiki/Template_me...

2. analizerDZhon /1 22.09.2011 06:55 mcabber

не получится. класс создающий и использующий mock объект не должен делать различия при создании его, например в виде пропихивания policy. либо же тебе эту policy надо будет через весь продукт тянуть и у тебя получится header-only. я тогда не знаю сколько у меня компиляция занимать будет. скорее сдохнет от нехватки памяти процентах на десяти.

3. DZhonanalizer /2 22.09.2011 06:57

Ну это же кресты.

4. DZhonDZhon /3 22.09.2011 06:58

Да, нехватка аргументов (иногда так делаю).

5. DZhon 22.09.2011 07:05

okay, делаем mock с тем же интерфейсом, но без наследования и используем для тестирования шаблон функции/метода. Который на вход хавает параметр — тип, который будем тестить. Тот же Google Test отлично жует TYPED_TESTS.

6. analizerDZhon /5 22.09.2011 07:09 mcabber

опять шаблон. опять протаскивать. шаблонизированные тесты и Boost.Test умеет, но опять же — надо протаскивать шаблонный параметр в класс, который использует mock-объект. так... и эта... надо наверное наваять минимальный пример, который упрётся в оба костыля — подмену библиотечных функций и виртуальное наследование.

7. DZhonanalizer /6 22.09.2011 07:16

Значит возвращаемся к тезису /3 и думаем еще.

8. analizerDZhon /7 22.09.2011 07:18 mcabber

часов в шесть домой вернусь и подумаю

9. DZhon 23.09.2011 05:09

Как это ни печально, я считаю, что трюк с хэдерами самый быстрый и простой (через макросы). 5 строк где-то будет.

10. analizerDZhon /9 23.09.2011 05:28 mcabber

это действительно печально.

Do you really want to delete ?