Я читаю много документации и примеры того, как правильно тестировать единицы, объединяющие три компонента в названии. Я придумал метод тестирования метода моей бизнес-логики, но он чувствует себя очень неуклюжим и грязным.Практика XUnit, AutoFixture и Moq
Я хотел бы получить некоторые отзывы от людей, более опытных по этой теме, чтобы узнать, как я могу это улучшить.
Вот код, объяснение следующим образом:
[Fact]
public void ShouldGetItemWithSameId()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var facade = fixture.Freeze<Mock<IDataFacade>>();
facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });
var sut = fixture.Create<BusinessLogic>();
var expected = fixture.Create<int>();
Assert.Equal(expected, sut.Get(expected).Key);
}
Моего BusinessLogic
класс принимает IDataFacade
в качестве параметра конструктора, который отвечает в методе Get(int)
для извлечения элемента с одинаковым идентификатором, довольно основным материалом.
Я замораживаю IDataFacade
макет, и я установил его для построения объекта, соответствующего ID в It.IsAny<int>
. Затем я создаю свой SUT и тестирую его. Работает отлично.
Я хотел бы понять, если я могу улучшить положение вещей, учитывая следующее:
- Я должен проверить более сложные методы, такие как
Query
метод, который принимает класс, содержащий множество свойств, которые будут использоваться как фильтры для сопоставления свойств для запрашиваемого типа. В этом случае я не знаю, как правильно выполнить часть «Настройка» макета, так как я должен инициализировать все или близкие ко всем свойства возвращаемого типа, и в этом случае это не один элемент, но целая коллекция - установка часть чувствует неуместны, я хотел бы иметь возможность использовать его в более методов
у меня есть некоторые другие тесты с использованием Theory
с AutoMoqData
, но я не смог достичь этого теста (и я думаю, что более сложные) используют этот подход, поэтому я переключился на обычный Fact
с вручную созданным экземпляром.
Любая помощь будет чрезвычайно оценена.
Вы считали (Авто) NSubstitute - я слишком долго держался за мое «неправильное отношение к Moq». http://weareadaptive.com/blog/2014/09/30/why-nsubstitute/ –