Цель создания анонимных типов в AutoFixture для тестируемого класса? - PullRequest
7 голосов
/ 31 мая 2011

Я недавно начал использовать библиотеку AutoFixture (http://autofixture.codeplex.com/) для модульного тестирования, и мне это очень нравится.

Я получил этот пример кода с веб-сайта AutoFixture CodePlex. У меня вопрос по поводу строки № 8.

1.   [TestMethod]
2.   public void IntroductoryTest()
3.   {
4.        // Fixture setup
5.        Fixture fixture = new Fixture();
6.
7.        int expectedNumber = fixture.CreateAnonymous<int>();
8.        MyClass sut = fixture.CreateAnonymous<MyClass>();
9.        
10.        // Exercise system
11.        int result = sut.Echo(expectedNumber);
12.        
13.        // Verify outcome
14.        Assert.AreEqual<int>(expectedNumber, result, "Echo");
15.        // Teardown
16.    }

Не могу понять, зачем нам нужно создавать анонимный объект тестируемого класса.

        MyClass sut = fixture.CreateAnonymous<MyClass>();

Класс должен быть реальным объектом IMO. Для примера ..

        var sut = new MyClass();    

Мой вопрос: в чем реальная выгода от создания анонимного объекта для проверки?

1 Ответ

4 голосов
/ 31 мая 2011

В тривиальном случае вы правы - материальной разницы нет.

Тем не менее, Инкапсуляция SUT API имеет свое применение - поскольку ваша тестируемая система и ее объект Fixture s становятся более интересными, чем что-то с ctor по умолчанию (действительно ли он имеет нет зависимостей?), Например:

  • MyClass требует, чтобы материал был загружен в его конструкторы
  • `MyClass имеет свойства чтения / записи, к которым нельзя применять значения по умолчанию (программирование по совпадению)
  • в MyClass есть что-то еще, что вы хотите применить политику к

Затем начинает действовать способность задействовать Sut Factory , позволяя стороннему коду исчезать и позволяя применять сквозные проблемы к процессу.

РЕДАКТИРОВАТЬ: По какой-то причине @ Брэд Уилсон счел нужным опубликовать эту статью , что является своего рода

...