Unit тесты для C# проектов

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Для юнит-тестов я использую NUnit, в отдельно созданом проекте. Проблема в том, что многие классы продакт-проекта — internal, а значит немогут быть вызваны из другого проекта. Немного погуглив, вижу, что люди используют в основном 2 подхода: либо через рефлекшн, либо Friend Assemblies.

Как решаете это вы?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
тесты в той же папке, или даже в том же файле, оборачиваю в
#if TEST
код теста
#endif

тестирую паблик и internal методы (при этом private и другие как правило итак тестируются при тесте пабликов), кстати стараюсь все ненужное в паблике делать internal. Лично я против отдельного проекта как раз из-за интернала

я тесты кладу в тот же проект. Проблема internal решена.
Что бы не путались делаю java-like directory tree
src->
tets->

когда nant собирает, test можно удалить.

Нет, просто это чёрный ящик. Ведь internal классы используются публичными. Тестирую только публичные, если неверно работают используемые ими приватные классы, то валятся тесты публичных. Естественно всё относительно, поэтому иногда приходится и internal классы тестировать.

Это кстати один из множества подходов — один лагерь ратует за тестирование всего и вся, другой за тестирование лишь публичных вещей и т.п. Я принадлежу второму. Надеюсь холивара не будет?:)

>> Internal классы тестирую _очень_ редко

те у тебя в проектах большинство классов public?

Правой кнопкой мыши на проекте с тестами в Solution Explorer -> Add Existing Item-> Выбираем файл с этим самым internal классом и на кнопке Add жмём стрелочку, выбираем там Add As Link. Теперь в нашем тестовом проекте мы можем напрямую использовать этот internal class.
Минусы: — Увеличивается время билда. — Больше зависимостей у тестового проекта.
Плюсы:
+ Не надо вытаскивать публичный ключ чтобы указать сборку-друга (если Вы используете подписывание сборок).
+ Не надо мучаться с рефлекшеном.

P.S. Internal классы тестирую _очень_ редко. Private, protected члены класса не тестирую вообще.

Підписатись на коментарі