В .NET Core для модульного тестирования я использую Xunit, Moq и Autofixture. Но даже с ними я вижу, что мои модульные тесты усложняются и занимают время.
Может быть, кто-то может сказать мне, если есть какие-либо способы сделать этот тест меньше?
[Fact]
public async Task Verify_NotAuthorised_NoServiceSendInvoked()
{
// Arrange
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var sut = fixture.Create<VerificationService>();
var mockApiBuilder = fixture.Freeze<Mock<IApiEntityBuilder>>();
//init mocked mockSendServiceOne, so later I could check if it was invoked or not
var mockSendServiceOne = fixture.Freeze<Mock<ISendServiceOne>>();
mockApiBuilder.Setup(x => x.Verification(It.IsAny<string>(), It.IsAny<string>()))
.Returns(fixture.Create<VerificationEntity>());
var call = fixture.Freeze<Mock<ISendServiceTwo>>();
call.Setup(x => x.IsSuccessful()).Returns(false);
// Act
await sut.Verify(fixture.Create<string>(), fixture.Create<string>());
// Assert
mockSendServiceOne .Verify(x => x.Call(It.IsAny<SendServiceOneEntity>()), Times.Never);
}
Тестированиесам метод
public async Task<CreatedEntity> Verify(string dataOne, string dataTwo)
{
await _someCaller.Call(_apiEntityBuilder.Verification(dataOne, dataTwo));
_someCaller.CreatePayment();
if (!_someCaller.IsSuccessful()) return _someCaller.CreatedEntity;
await mockSendServiceOne.Call(_apiEntityBuilder.Call(_someCaller.CreatedEntity.SpecificData));
return _someCaller.CreatedEntity;
}
Здесь я тестирую, если isSuccessful () возвращает fasle, тогда не следует вызывать mockSendServiceOne.Call.
Может ли кто-нибудь дать мне отзыв о том, как написать более качественные модульные тесты,Потому что только для этой небольшой проверки кода мне пришлось написать много кода для его проверки.