Перечислить все типы в авто-тесте на C#
От: Nikolay_Ch Россия  
Дата: 02.12.14 08:07
Оценка:
Приветствую!

Есть задача: проверить, что если тип наследует какой-то интерфейс, он правильно реализует какой-то метод этого интерфейса. Ну, или: если тип имеет какой-то атрибут, он опять же правильно реализует какой-то метод.
Дело осложняется тем, что типы мы подгружаем динамически после старта приложения, т.к. солюшн содержит набор типов в разных проектах, которые связаны между собой через интерфейсы и между этими проектами нет прямых references.
Тесты пишем на NUnit. И, я пока не могу понять, каким образом перечислить внутри юнит-теста все типы солюшна? Есть какие-то стандартные способы решения такой задачи?

Николай
все типы солюшна перечислить все типы найти типы тестирование c# .net nunit unit test
Re: Перечислить все типы в авто-тесте на C#
От: Sinix  
Дата: 02.12.14 08:12
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Тесты пишем на NUnit. И, я пока не могу понять, каким образом перечислить внутри юнит-теста все типы солюшна? Есть какие-то стандартные способы решения такой задачи?

http://docs.teststack.net/conventiontests/index.html ? Он вроде бы нормально сочетается с nunit.
Re[2]: Перечислить все типы в авто-тесте на C#
От: Nikolay_Ch Россия  
Дата: 02.12.14 08:20
Оценка:
Здравствуйте, Sinix, Вы писали:

N_C>>Тесты пишем на NUnit. И, я пока не могу понять, каким образом перечислить внутри юнит-теста все типы солюшна? Есть какие-то стандартные способы решения такой задачи?

S>http://docs.teststack.net/conventiontests/index.html ? Он вроде бы нормально сочетается с nunit.
А как там решается основной вопрос: найти все типы внутри папки, куда была проведена сборка? Перечислять в тесте все типы (ну, или все сборки) не вариант — всегда остается возможность пропустить что-нибудь.

Т.е., пор сути, у меня основной вопрос не "как протестировать", а "как прогрузить в память все сборки из папки, куда был проведен билд".
Re[3]: Перечислить все типы в авто-тесте на C#
От: Sinix  
Дата: 02.12.14 08:49
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Т.е., пор сути, у меня основной вопрос не "как протестировать", а "как прогрузить в память все сборки из папки, куда был проведен билд".

Вручную, пожалуй. Собираем список сборок, загружаем, получаем типы. Навскидку:
http://stackoverflow.com/a/10253634/318263
http://stackoverflow.com/q/13663068/318263

upd ну и сами convention tests тога могут быть и не особо полезны.
Отредактировано 02.12.2014 8:50 Sinix . Предыдущая версия .
Re[4]: Перечислить все типы в авто-тесте на C#
От: Nikolay_Ch Россия  
Дата: 02.12.14 10:53
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Nikolay_Ch, Вы писали:


N_C>>Т.е., пор сути, у меня основной вопрос не "как протестировать", а "как прогрузить в память все сборки из папки, куда был проведен билд".

S>Вручную, пожалуй. Собираем список сборок, загружаем, получаем типы. Навскидку:
Хе-хе... Неужели я бы задавал здесь вопрос, если бы было все так просто? Во-первых, у меня сборки не ссылаются друг на друга, а во-вторых — я не могу найти папку, куда был помещен собранный билд, к сожалению.
Надо еще сказать, что у меня проверка производится на TFS — а там вообще швах с папками. Получить изнутри билда папку, куда он складировал все сборки билда у меня не получается.
Re[5]: Перечислить все типы в авто-тесте на C#
От: Sinix  
Дата: 02.12.14 11:44
Оценка: 4 (1)
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Надо еще сказать, что у меня проверка производится на TFS — а там вообще швах с папками. Получить изнутри билда папку, куда он складировал все сборки билда у меня не получается.

AppDomain.CurrentDomain.BaseDirectory, или Assembly.Running.Codebase?
(по памяти, имя может отличаться).
Re: Перечислить все типы в авто-тесте на C#
От: andyag  
Дата: 14.12.14 08:13
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Приветствую!


N_C>Есть задача: проверить, что если тип наследует какой-то интерфейс, он правильно реализует какой-то метод этого интерфейса. Ну, или: если тип имеет какой-то атрибут, он опять же правильно реализует какой-то метод.

N_C>Дело осложняется тем, что типы мы подгружаем динамически после старта приложения, т.к. солюшн содержит набор типов в разных проектах, которые связаны между собой через интерфейсы и между этими проектами нет прямых references.
N_C>Тесты пишем на NUnit. И, я пока не могу понять, каким образом перечислить внутри юнит-теста все типы солюшна? Есть какие-то стандартные способы решения такой задачи?

N_C>Николай


Вот так можно:

1. Берём NInject
2. Через https://github.com/ninject/ninject.extensions.conventions байндим все подходящие классы к нужному интерфейсу. Оно умеет смотреть на много сборок одновременно (https://github.com/ninject/Ninject.Extensions.Conventions/wiki/Projecting-Assemblies)
3. В тесте получаем инстансы нужных классов через Multi injection (https://github.com/ninject/Ninject/wiki/Multi-injection)
4. В NUnit пишем параметризованный тест (http://nunit.org/index.php?p=testCaseSource&r=2.5), коллекцию тестовых данных строим из п.3.
Отредактировано 14.12.2014 8:15 andyag . Предыдущая версия . Еще …
Отредактировано 14.12.2014 8:13 andyag . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.