Anonymous
Пример модульного тестирования выполняется индивидуально, но вместе завершается сбоем
Сообщение
Anonymous » 03 дек 2024, 12:49
У меня есть тестовый пример, который не работает при совместном запуске и работает нормально по отдельности. Я пробовал добавить Thread.Sleep(), а также обновить вызов метода до синхронного, но мне это не помогло.
Код: Выделить всё
[Fact]
public async Task Should_Trigger_PublishLocationWac_Function()
{
//Arrange
PrepareData(out List locationWacData, out SkuAndWac skuAndWac);
Arrange(locationWacData);
//Act
var result = await _handler.RunAsync(skuAndWac, _mockContext.Object);
//Assert
Assert.Equal(locationWacData.Count, result.TotalDocuments);
Assert.Equal(locationWacData.Count, result.TotalPublished);
}
private void Arrange(List oneWacData, bool IsPublishedFailed = false, bool isException = false)
{
Environment.SetEnvironmentVariable(ConfigConstants.BatchSize, oneWacData.Count.ToString());
_mockloggerFactory.Setup(p => p.CreateLogger(It.IsAny())).Returns(_mockLogger.Object);
_mockServiceProvider.Setup(p => p.GetService(It.IsAny())).Returns(_mockloggerFactory.Object);
_mockContext.Setup(p => p.InstanceServices).Returns(_mockServiceProvider.Object);
var cursorMock = new Mock();
cursorMock.SetupSequence(x => x.MoveNext(It.IsAny()))
.Returns(true)
.Returns(false);
cursorMock.SetupSequence(x => x.MoveNextAsync(It.IsAny()))
.ReturnsAsync(true)
.ReturnsAsync(false);
cursorMock.SetupGet(x => x.Current).Returns(oneWacData);
if (isException)
{
_mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny(), It.IsAny(), default))
.ThrowsAsync(new Exception("Test exception"));
}
else
{
_mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny(), It.IsAny(), default))
.ReturnsAsync(cursorMock.Object);
}
if (IsPublishedFailed)
{
_mockMessageProducer.Setup(x => x.Produce(It.IsAny(), It.IsAny()))
.ReturnsAsync(0);
}
else
{
_mockMessageProducer.Setup(x => x.Produce(It.IsAny(), It.IsAny()))
.ReturnsAsync(oneWacData.Count);
}
}
private static void PrepareData(out List locationWacData, out SkuAndWac skuAndWac)
{
locationWacData =
[
new LocationWac
{
DataPartitionKey = "sain1",
Sku = "sku1",
Sain = "sain1",
WacPerUnit = 1.0m,
LastModifiedDate = DateTime.Now,
VariancePercent = 0.1m,
ProductGroup = "Food"
},
new LocationWac
{
DataPartitionKey = "sain2",
Sku = "sku2",
Sain = "sain2",
WacPerUnit = 1.0m,
LastModifiedDate = DateTime.Now,
VariancePercent = 0.1m,
ProductGroup = "Food"
}
];
skuAndWac = new SkuAndWac
{
Sain = "sain1",
Wac = 1.0m
};
}
Во время работы я получаю следующую ошибку:
Ошибка Assert.Equal(): значения различаются
Ожидается: 2
Фактическое: 4
Другой успешный тестовый пример —
Код: Выделить всё
[Fact]
public async Task RunAsync_Should_Log_BusinessException_WhenPublishingFails()
{
//Arrange
PrepareData(out List locationWacData, out SkuAndWac skuAndWac);
Arrange(locationWacData, true);
//Act
var result = await _handler.RunAsync(skuAndWac, _mockContext.Object);
// Assert
Assert.Equal(locationWacData.Count, result.TotalDocuments);
Assert.Equal(0, result.TotalPublished);
_mockErrorHandlingHelper.Verify(x => x.InsertErrorLogAsync(It.IsAny()), Times.Once);
}
Может ли кто-нибудь мне помочь в этом?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... g-together
1733219393
Anonymous
У меня есть тестовый пример, который не работает при совместном запуске и работает нормально по отдельности. Я пробовал добавить Thread.Sleep(), а также обновить вызов метода до синхронного, но мне это не помогло. [code][Fact] public async Task Should_Trigger_PublishLocationWac_Function() { //Arrange PrepareData(out List locationWacData, out SkuAndWac skuAndWac); Arrange(locationWacData); //Act var result = await _handler.RunAsync(skuAndWac, _mockContext.Object); //Assert Assert.Equal(locationWacData.Count, result.TotalDocuments); Assert.Equal(locationWacData.Count, result.TotalPublished); } private void Arrange(List oneWacData, bool IsPublishedFailed = false, bool isException = false) { Environment.SetEnvironmentVariable(ConfigConstants.BatchSize, oneWacData.Count.ToString()); _mockloggerFactory.Setup(p => p.CreateLogger(It.IsAny())).Returns(_mockLogger.Object); _mockServiceProvider.Setup(p => p.GetService(It.IsAny())).Returns(_mockloggerFactory.Object); _mockContext.Setup(p => p.InstanceServices).Returns(_mockServiceProvider.Object); var cursorMock = new Mock(); cursorMock.SetupSequence(x => x.MoveNext(It.IsAny())) .Returns(true) .Returns(false); cursorMock.SetupSequence(x => x.MoveNextAsync(It.IsAny())) .ReturnsAsync(true) .ReturnsAsync(false); cursorMock.SetupGet(x => x.Current).Returns(oneWacData); if (isException) { _mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny(), It.IsAny(), default)) .ThrowsAsync(new Exception("Test exception")); } else { _mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny(), It.IsAny(), default)) .ReturnsAsync(cursorMock.Object); } if (IsPublishedFailed) { _mockMessageProducer.Setup(x => x.Produce(It.IsAny(), It.IsAny())) .ReturnsAsync(0); } else { _mockMessageProducer.Setup(x => x.Produce(It.IsAny(), It.IsAny())) .ReturnsAsync(oneWacData.Count); } } private static void PrepareData(out List locationWacData, out SkuAndWac skuAndWac) { locationWacData = [ new LocationWac { DataPartitionKey = "sain1", Sku = "sku1", Sain = "sain1", WacPerUnit = 1.0m, LastModifiedDate = DateTime.Now, VariancePercent = 0.1m, ProductGroup = "Food" }, new LocationWac { DataPartitionKey = "sain2", Sku = "sku2", Sain = "sain2", WacPerUnit = 1.0m, LastModifiedDate = DateTime.Now, VariancePercent = 0.1m, ProductGroup = "Food" } ]; skuAndWac = new SkuAndWac { Sain = "sain1", Wac = 1.0m }; } [/code] Во время работы я получаю следующую ошибку: Ошибка Assert.Equal(): значения различаются Ожидается: 2 Фактическое: 4 Другой успешный тестовый пример — [code][Fact] public async Task RunAsync_Should_Log_BusinessException_WhenPublishingFails() { //Arrange PrepareData(out List locationWacData, out SkuAndWac skuAndWac); Arrange(locationWacData, true); //Act var result = await _handler.RunAsync(skuAndWac, _mockContext.Object); // Assert Assert.Equal(locationWacData.Count, result.TotalDocuments); Assert.Equal(0, result.TotalPublished); _mockErrorHandlingHelper.Verify(x => x.InsertErrorLogAsync(It.IsAny()), Times.Once); } [/code] Может ли кто-нибудь мне помочь в этом? Подробнее здесь: [url]https://stackoverflow.com/questions/79246976/unit-test-case-running-individually-but-failing-together[/url]