Reputation: 64
I have a test case which is failing when running all together and working fine individually. I have tried adding Thread.Sleep() and also tried updating the method call to synchronous but didn't help me.
[Fact]
public async Task Should_Trigger_PublishLocationWac_Function()
{
//Arrange
PrepareData(out List<LocationWac> 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<LocationWac> oneWacData, bool IsPublishedFailed = false, bool isException = false)
{
Environment.SetEnvironmentVariable(ConfigConstants.BatchSize, oneWacData.Count.ToString());
_mockloggerFactory.Setup(p => p.CreateLogger(It.IsAny<string>())).Returns(_mockLogger.Object);
_mockServiceProvider.Setup(p => p.GetService(It.IsAny<Type>())).Returns(_mockloggerFactory.Object);
_mockContext.Setup(p => p.InstanceServices).Returns(_mockServiceProvider.Object);
var cursorMock = new Mock<IAsyncCursor<LocationWac>>();
cursorMock.SetupSequence(x => x.MoveNext(It.IsAny<CancellationToken>()))
.Returns(true)
.Returns(false);
cursorMock.SetupSequence(x => x.MoveNextAsync(It.IsAny<CancellationToken>()))
.ReturnsAsync(true)
.ReturnsAsync(false);
cursorMock.SetupGet(x => x.Current).Returns(oneWacData);
if (isException)
{
_mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny<FilterDefinition<LocationWac>>(), It.IsAny<FindOptions<LocationWac, LocationWac>>(), default))
.ThrowsAsync(new Exception("Test exception"));
}
else
{
_mockLocationWacRepository.Setup(x => x.GetCollection().FindAsync(It.IsAny<FilterDefinition<LocationWac>>(), It.IsAny<FindOptions<LocationWac, LocationWac>>(), default))
.ReturnsAsync(cursorMock.Object);
}
if (IsPublishedFailed)
{
_mockMessageProducer.Setup(x => x.Produce(It.IsAny<List<string>>(), It.IsAny<string>()))
.ReturnsAsync(0);
}
else
{
_mockMessageProducer.Setup(x => x.Produce(It.IsAny<List<string>>(), It.IsAny<string>()))
.ReturnsAsync(oneWacData.Count);
}
}
private static void PrepareData(out List<LocationWac> 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
};
}
The error I am getting while running is -
Assert.Equal() Failure: Values differ Expected: 2 Actual: 4
The other test case which is successful-
[Fact]
public async Task RunAsync_Should_Log_BusinessException_WhenPublishingFails()
{
//Arrange
PrepareData(out List<LocationWac> 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<ServiceNowErrorLog>()), Times.Once);
}
Can someone help me on this.
Upvotes: 0
Views: 33