У меня есть следующий метод, который вызывает методы вставки и обновления.
Условия
В приведенной ниже функции ProcessBspLoan
я вызываю другую функцию с именем getBspData
, если getBspData
возвращает какой-либо результат. Я буду вставлять результат и обновлять базу данных как успех для конкретного идентификатора
если getBspData
вызывает какое-либо исключение, я буду только обновить базу данных как сбой для определенного Id без вставки
Вот функция ProcessBspLoan в данном классе
public class BspLoanProcessor : IBspLoanProcessor
{
private readonly IBspClient _bspService;
private readonly IBspRepository _bspRepository;
private readonly ILogger<BspLoanProcessor> _logger;
private readonly IMapper _mapper;
private readonly IFhaRepository _fhaRepository;
public BspLoanProcessor(IBspClient bspService, ILogger<BspLoanProcessor> logger,
IMapper mapper, IBspRepository bSPRepository, IFhaRepository fhaRepository)
{
_bspService = bspService;
_logger = logger;
_mapper = mapper;
_bspRepository = bSPRepository;
_fhaRepository = fhaRepository;
}
public async Task<bool> ProcessBspLoan(BspLoanDetails bspLoanDetails, string transactionId, string triggerType)
{
FhaTransactionDetails fhaData = _mapper.Map<FhaTransactionDetails>(bspLoanDetails);
try
{
////////////////////////////Calling getBspData///////////////////////////////////////
var result = await _bspService.getBspData(bspLoanDetails.NsmLoanNumber, transactionId);
result.TransactionId = transactionId;
await _bspRepository.InsertBspResponse(result);
await _fhaRepository.UpdateFhaTransactionWithLoanNumber(transactionId,"SUCCESS");
return true;
}
catch(Exception ex)
{
await _fhaRepository.UpdateFhaTransactionWithLoanNumber(transactionId,"FAIL");
return false;
}
}
}
Я написал метод тестирования для вышеуказанной функции, чтобы проверить, возвращает ли она истину или ложь в зависимости от предоставленных входных данных
Вот моя тестовая функция
public async Task Test1Async()
{
Mock<IBspLoanProcessor> _bspLoanProcessor = new Mock<IBspLoanProcessor>();
Mock<IBspRepository> _bspRepository = new Mock<IBspRepository>();
Mock<IFhaRepository> _fhaRepository = new Mock<IFhaRepository>();
Mock<IBspClient> _bspClient = new Mock<IBspClient>();
BspLoanDetails bspLoanDetails = new BspLoanDetails
{
TriggerType = "BLOB",
Attempts = 1,
FirstRunDateTime = DateTime.Now.ToUniversalTime()
};
----> 1
_bspClient.Setup(x => x.getBspData(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(new BspResponseDetails()));
----> 2
_bspRepository.Setup(x => x.InsertBspResponse(It.IsAny<BspResponseDetails>())).Returns(Task.CompletedTask);
----> 3
_fhaRepository.Setup(x => x.UpdateFhaTransactionWithLoanNumber(It.IsAny<string>(),It.IsAny<string>())).Returns(Task.CompletedTask);
bool value = await _bspLoanProcessor.Object.ProcessBspLoan(bspLoanDetails, "123", "SCHEDULE");
Assert.True(value);
}
В приведенном выше примере test, я проверяю первое условие
- Я возвращаю данные как объект всякий раз, когда кто-либо получает данные
- Вставка
BspResponsemethod
также я возвращаю task.completedTask
UpdateFhaTransactionWithLoanNumber
также я возвращаю task.completedTask
Фактический ожидаемый результат верен, но он возвращает false.
Я новичок в Moq и xUnit. Пожалуйста, помогите мне решить эту проблему, а также протестируйте методы asyn c и await.
Интерфейс IBspClient
public interface IBspClient
{
Task<BspResponseDetails> getBspData(string loanNumber,string tid);
Task<BspHealthCheck> GetHealthStatus();
}
Интерфейс IBspRepository
public interface IBspRepository
{
Task InsertBspResponse(BspResponseDetails bsp);
}
Интерфейс IFhaRepository
public interface IFhaRepository
{
Task UpdateFhaTransactionWithLoanNumber(string tid, string status);
}
Заранее спасибо