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

Недавно я начал использовать библиотеку 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();    

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


person Spock    schedule 31.05.2011    source источник
comment
Autofixture теперь находится по адресу: github.com/AutoFixture/AutoFixture.   -  person Jim Aho    schedule 04.02.2019


Ответы (1)


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

Тем не менее, инкапсуляция SUT API находит свое применение — поскольку ваша система Under Test и его Fixture Object становятся более интересными, чем что-то со значением по умолчанию. ctor (у него действительно нет зависимостей?), например:

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

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

EDIT: по какой-то причине @Brad Wilson увидел подходит, чтобы сделать репост этой статьи, которая довольно бросается в глаза

person Ruben Bartelink    schedule 31.05.2011
comment
+1 По сути, он отделяет модульный тест от сигнатуры конструктора SUT, что делает тесты более надежными при рефакторинге. - person Mark Seemann; 31.05.2011
comment
Очень хорошо! Спасибо Рубен и Марк. - person Spock; 01.06.2011