2013-09-17 3 views
5

Мои проекты используют StructureMap как контейнер/IoC. Я использую это в таких вещах, как шаблоны репозитория. В моем модульном тестовом проекте я реализовал тестовые репозитории, когда это имеет смысл. Чтобы каркас структуры знал, какую конкретную реализацию использовать, мне нужно инициализировать контейнер и запустить регистрацию типов. Я ищу место для вызова моего IoC.Initialize() в проекте единичного тестирования. Вне модульного теста, например, в веб-проекте, я могу инициализировать мой контейнер/регистрацию IoC из Global.asax. Я ищу эквивалент Unit Test, эквивалентный Global.asax (например, static void main, способ подключиться к начальной точке входа в стартовый блок тестов Unit). Я обошел это, используя базовый класс для всех своих тестов и инициализируя там, поэтому любой протестированный тест заканчивается инициализацией контейнера IoC, если он еще не инициализирован ... но он очень хак-иш IMHO, поэтому Я ищу более чистый способ.Событие запуска проекта Visual Studio?

Любые предложения?

UPDATE/ОТВЕТ

Ниже решение я реализовывал в ответ Мэтью.

<TestClass()> 
Public Module Main 

    Public Property TestContext As TestContext 

    <AssemblyInitialize()> 
    Public Sub Initialize(_TestContext As TestContext) 

     TestContext = _TestContext 
     IoC.Initialize() 

    End Sub 

End Module 

ответ

11

Возможно, вы ищете AssemblyInitializeAttribute. Вы можете украсить метод этим классом в своей сборке, и он будет запущен один раз, прежде чем все тесты в этой сборке будут запущены.

+0

Perfect. Чтобы добавить ясность для тех, кто наткнулся на этот вопрос, я добавил обновление к вопросу выше с моей конкретной реализацией ответа (например, метод с этим декоратором нуждается в конкретной сигнатуре, а класс/модуль, в котором он находится, должен быть украшен TestClassAttribute). Спасибо, Мэтью! – wakurth

Смежные вопросы