Juhi Saxena
Juhi Saxena

Reputation: 64

Unit Test Case running individually but failing together

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

Answers (0)

Related Questions