Информация об изменениях

Сообщение Re: Перечислить все типы в авто-тесте на C# от 14.12.2014 8:13

Изменено 14.12.2014 8:15 andyag

Здравствуйте, 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"
4. В NUnit пишем параметризованный тест (http://nunit.org/index.php?p=testCaseSource&r=2.5), коллекцию тестовых данных строим из п.3.
Re: Перечислить все типы в авто-тесте на C#
Здравствуйте, 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.