Переодически не проходит тест xUnit
Сам класс который нужно протестировать:
public class ClamAV : IVirusCheck
{
private readonly ILogger<ClamAV> _logger;
private readonly IClamSetting _clamSetting;
public ClamAV(ILogger<ClamAV> logger, IClamSetting clamSetting)
{
_logger = logger;
_clamSetting = clamSetting;
}
public async Task<bool> GetResultScan(IFormFile file)
{
try
{
var fileStream = file.OpenReadStream();
var clam = _clamSetting.SetClam();
var scanResult = await clam.SendAndScanFileAsync(fileStream);
var rerult = scanResult.Result == ClamScanResults.Clean ? true : false;
return rerult;
}
catch (Exception ex)
{
_logger.LogCritical(ex.ToString());
return false;
}
}
}
public interface IClamClient
{
Task<ClamScanResult> SendAndScanFileAsync(Stream stream);
}
public class ClamClientWrapper : IClamClient
{
private readonly ClamClient _clamClient;
public ClamClientWrapper(ClamClient clamClient)
{
_clamClient = clamClient;
}
public async Task<ClamScanResult> SendAndScanFileAsync(Stream stream)
{
return await _clamClient.SendAndScanFileAsync(stream);
}
}
public interface IClamSetting
{
IClamClient SetClam();
}
public class ClamSetting : IClamSetting
{
public IClamClient SetClam()
{
return new ClamClientWrapper(new ClamClient("localhost", 3310)
{
MaxStreamSize = 75 * 1024 * 1024
});
}
}
Вот сам тест:
[Fact]
public async Task GetResultScan_CleanFile_ReturnsTrue()
{
var loggerMock = new Mock<ILogger<ClamAV>>();
var clamSettingMock = new Mock<IClamSetting>();
var cleanFileClamClientMock = new Mock<IClamClient>();
cleanFileClamClientMock
.Setup(c => c.SendAndScanFileAsync(It.IsAny<Stream>()))
.ReturnsAsync(new ClamScanResult("ok"));
clamSettingMock.Setup(c => c.SetClam()).Returns(cleanFileClamClientMock.Object);
var clamAV = new ClamAV(loggerMock.Object, clamSettingMock.Object);
var fileMock = new Mock<IFormFile>();
var fileStreamMock = new MemoryStream(3 * 1024 * 1024);
fileMock.Setup(f => f.OpenReadStream()).Returns(fileStreamMock);
var result = await clamAV.GetResultScan(fileMock.Object);
Assert.True(result);
}
Порой тест не проходит из-за того что ожидался true, но вернулось false.