Должен ли я провести модульное тестирование класса на наличие атрибутов MEF? - PullRequest
2 голосов
/ 10 августа 2010

Я хочу реорганизовать библиотеку DLL, чтобы она тоже была MEFable.Должен ли я выполнить модульный тест на то, украшен ли класс [Export] или [Import] и другими атрибутами MEF?

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Ваши тесты должны больше фокусироваться на цели, а не на механизме.Создайте тесты, которые проверяют такие вещи, как «, если я объединю типы X, Y и Z в контейнере, то я могу извлечь интерфейс IFoo из контейнера », например:

[Test]
public void Can_get_IFoo_from_container_with_Foo_Bar_Baz()
{
    var catalog = new TypeCatalog(typeof(Foo), typeof(Bar), typeof(Baz));
    using (var container = new CompositionContainer(catalog))
    {
        var test = container.GetExportedValue<IFoo>();
    }
}

Это больше не настоящий «модульный» тест, потому что он включает в себя несколько классов и контейнер IoC.Мы просто называем их «композиционными тестами».

1 голос
/ 12 августа 2010

Подумав несколько часов и снова прочитав некоторые блоги TDD, я должен сказать: ДА, я должен проверить, есть ли в моем классе атрибуты MEF или нет.

Поэтому перед рефакторингом своих классов я пишу модульные тесты таким образом.:

[TestClass]
public class When_SampleClass_mefable
{
   [TestMethod]
   [TestCategory("LFF.Kabu.Win.Login.ViewModel.SampleClass")]
   public void Should_SampleClass_be_marked_with_Export_Attibute()
   {
       //arrange
       var info = (typeof (SampleClass));

       //act
       var attr = info.GetCustomAttributes(true);

       var hasExportAttribute = 
           attr.Where(x => x.GetType() == typeof (ExportAttribute))
               .Where(x => ((ExportAttribute)x).ContractType == typeof(SampleClass))
               .Count() > 0;
       //assert
       Assert.IsTrue(hasExportAttribute, "SampleClass is not marked with Export.");
    }
}

Для других атрибутов MEF, таких как [ImportingConstructor] или [PartCreationPolicy], я делаю это так же.

...