Сегодня под раздачу попадает чудо рук майкрософтовских – фреймворк для юнит-тестов MSTest.
Когда я его увидел, первое впечатление было “красивая свистелка, но держаться от нее нужно подальше”. Опыт использования этого угребищного куска говна на солюшене из 30 проектов с mixed кодом показал, что первое впечатление не обмануло.
Во-первых (и в главных), его не могли написать люди, которые что-то понимают в юнит тестировании. Его писали какие-то человекоподобные обезъянки в полной изоляции от внешнего мира (интернет им, похоже, тоже отключили). Простейший пример – один из тестов не прошел, сработал ассерт. Что сделает нормальный программист? Кликнет на сообщении о проваленном тесте в надежде сразу прыгнуть на место ассерта в кода. Именно так работает, к примеру, cppunit. Что сделали гении из MS? Правильно, под даблклику вылезает восхитительное по своей долбанутости окно с “подробной информацией об ошибке”, которое, в духе M$, имеет бесконечно отрицательную информационную ценность. До места ассерта, что характерно, приходится добираться вручную, причем, если у вас в тесте ассертов больше одного и Вы не расставили вручную сообщения вроде “ассерт 1″ и “абсолютно невозможный ассерт”, то поиск места ошибки превращается в увлекательную игру-угадайку.
Уже одного это должно быть достаточной причиной не использовать это поделие в своем проекте. Но, если Вы, превозмогая все трудности и лишения, все же используете ЭТО, то знайте, что рано или поздно Вас ждет бетонная стена. Дело в том, что MSTest каким-то образом завязан на IntelliSense, которая, в свою очередь, известна тем, что норовит вызывать забавные спецэффекты на сколько-нибудь большом проекте. По крайней мере, это так в 2005 студии. Так вот, будьте готовы к тому, что после нажантия на кноп “запустить тест” можно будет смело идти на обед – Студия уходит в себя минут на 15-20.
Особой пикантности процессу разработки можно добавить, используя MSTest для тестирования нативного С++ кода. Если студия не зависнет, то ее добъет отладчик mixed mode, который не менее весело вешается в случайных случаях.
Что характерно, в M$ о всех вышеперечисленных проблемах знают. Их признают. И нихуя не делают.