суббота, 9 февраля 2013 г.

Группировка С++ юнит-тестов в Visual Studio 2012 Test Explorer

Я уже писал про использование нового фреймворка для C++ unit-тестов в Visual Studio 2012.
Продолжаем изучать новшества.

На работе обсуждали, зачем ввели атрибуты (модуля, класса, метода). Точного ответа пока не нашел, но обнаружил, что группировка тестов Traits отлично с ними работает. Update: тут есть немного подробностей про использование Traits.

И зачем нам теперь группировка по классам в Update 2? ;)


Правда и здесь не обошлось без косяков. Куда же без них? :)

Документация в MSDN утверждает что макросы объявления группы атрибутов модуля и класса имеют параметр. На самом деле они без параметров. И если с атрибутами классов из-за этого проблем не возникает (макрос объявляется внутри класса), то с модулем дела обстоят хуже. Макрос создания атрибутов модуля объявляет (и определяет) глобальную функцию __GetModuleMetadata, что при его использовании в нескольких файлах вызывает проблемы с линковкой.
Проблему можно решить использованием namespace'ов, своего на каждый модуль. Я также проверил и сделал другой макрос, с параметром - тоже работает и уже без namespace.

Итого: использовать можно. Группировка может быть полезной, если вы сейчас работаете с группой тестов и хотите запускать только их.

Осталось только неясным, где же ошибка: в MSDN или в CppUnitTest.h .

На самом деле, если честно, то группировка по классам из Update2 все равно нужна. Она отлично работает с Google C++ Test Framework тестами. Метод описанный выше тут не поможет.

Комментариев нет:

Отправить комментарий