2015-05-17 2 views
4

Мне нужно передать тестовые данные на уровне класса, но атрибуты Theory и InlineData могут использоваться только для методов.Тестирование нескольких реализаций интерфейса в одном тестовом классе

public class ContainerTests : TestFixture 
{ 
    private IContainer _container; 

    public ContainerTests(string containerName) 
    { 
     _container = CreateContainer(containerName); 
    } 

    [Fact] 
    public void ResolveJobFactory() 
    { 
     IJobFactory jobFactory = _container.Resolve<IJobFactory>(); 
    } 

    private IContainer CreateContainer(string containerName) 
    { 
     if (containerName == "CastleWindsor") 
     { 
      return new WindsorContainerAdapter(); 
     } 
     //other adapters 

     throw new NotImplementedException(); 
    } 
} 

Есть ли способ добиться чего-то подобного на xUnit.net?

+1

См. Http://blog.ploeh.dk/2011/05/09/GenericunittestingwithxUnit.net/ (И я уверен, что thsi - это вопрос с дуплексом, он не вылезает) –

+0

Спасибо @RubenBartelink. Просто использование наследования решило проблему. –

ответ

3

Тестирование множество реализаций интерфейса в одном тесте класса

Не! Имеет тестовый класс для каждой реализации.

Редактировать: В соответствии с комментариями я рекомендую иметь базовый TestClass со всеми распространенными тестами, а затем тестовый класс для каждой реализации, который наследуется от этого базового класса.

+1

Спасибо, но это не ответ на самом деле. Я ожидаю того же поведения от всех реализаций. Можете ли вы объяснить, почему это плохая идея? –

+0

Чтобы я понял вашу проблему, что вы пытаетесь точно проверить? Есть ли у вас несколько реализаций IJobFactory, и вы хотите проверить, что все они ведут себя определенным образом? Или это то, что у вас есть 1 реализация IJobFactory, но вы просто хотите проверить, что все контейнеры строят ее правильно? – Chris

+1

Если это первый, то вы можете написать базовый тестовый класс, который имеет все ваши тесты против реализации IJobFactory. Затем вы должны написать тестовый класс, который унаследован от этой базы для каждой реализации IJobFactory. Каждый наследник будет просто отвечать за построение реализации IJobFactory, а затем базовый класс выполнил бы остальную часть работы. – Chris

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