У меня есть функция с временным срабатыванием Azure, которую я хочу проверить с помощью XUnit и MOQ.
Хотя я знаю, что мне нужно вызвать метод Run
класса, используя экземпляр класса, скажем funTimeTriggeredObj
, где
funTimeTriggered funTimeTriggeredObj = new funTimeTriggered(queueSchedulerMock.Object, telemetryHelperMock.Object)
как
funTimeTriggeredObj.Run(param1, param2, loggerMock.Object)
где
private Mock<ILogger> loggerMock = new Mock<ILogger>()
Я не уверен, как мне высмеивать param1
& param2
, которые являются TimerInfo
и ExecutionContext
объектами соответственно.
Причина, по которой я спрашиваю, заключается в том, что ни в «TimerInfo», ни в «ExecutionContext» не реализован какой-либо интерфейс, который можно смоделировать.
Ниже приведена моя фактическая реализация функции. Любая помощь будет высоко ценится.
using System;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
public class funTimeTriggered
{
private string _invocationID;
private readonly IQueueScheduler _queueScheduler;
private readonly ITelemetryHelper _telemetryHelper;
public funTimeTriggered(IQueueScheduler queueScheduler, ITelemetryHelper telemetryHelper)
{
_queueScheduler = queueScheduler;
_telemetryHelper = telemetryHelper;
}
[FunctionName("funTimeTriggered")]
public async Task Run([TimerTrigger("0/10 * * * * *")]TimerInfo myTimer, ExecutionContext context, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
try
{
_invocationID = context.InvocationId.ToString();
await _queueScheduler.SendEventsToServiceBusAndDeleteFromSQS();
}
catch (Exception ex)
{
log.LogError(ex.Message);
_telemetryHelper.LogException(ex);
throw ex;
}
}
}