AutoFixture killer feature



Разбираясь в библиотеке AutoFixture пришёл к выводу, что её главное назначение это минимизация Arrange этапа в тесте.



За счёт чего это достигается? Специальные атрибуты для интеграций с фреймворками xUnit и NUnit предоставляют всю необходимую магию.



Например, атрибут AutoData.

Допустим, у нас есть некоторая корзина, которую надо протестировать на добавление позиций.

Как бы выглядел тест без AutoFixture?

[Fact]

public void Cart_NotNullItem_NotEmpty()

{

var item = new Item();

var sut = new Cart();



sut.AddItem(item);



Assert.NotEmpty(sut.Items);

}





А после применения атрибута?

[Theory, AutoData]

public void Cart_NotNullItem_NotEmpty(Item item, [Frozen] Cart sut)

{

sut.AddItem(item);



Assert.NotEmpty(sut.Items);

}





Теперь весь Arrange лёг на плечи библиотеки и больше не надо волноваться по поводу template кода с инстанциированием!

Ну а расширять поведение под нужды валидаций или каких-то moq'ирований естественно можно, но об этом в другой раз.



Ставьте огонёчки, если хотели бы узнать о том, что такое Arrange и подход AAA в тестировании.