The*_*der 5 c# unit-testing xunit azure azure-functions
我有一个时间触发的 Azure 函数,我想用 XUnit 和 MOQ 测试它。
虽然我知道我需要Run使用类的实例来调用该类的方法,但请说明funTimeTriggeredObj在哪里
funTimeTriggered funTimeTriggeredObj = new funTimeTriggered(queueSchedulerMock.Object, telemetryHelperMock.Object)
Run Code Online (Sandbox Code Playgroud)
喜欢
funTimeTriggeredObj.Run(param1, param2, loggerMock.Object)
Run Code Online (Sandbox Code Playgroud)
在哪里
private Mock<ILogger> loggerMock = new Mock<ILogger>()
Run Code Online (Sandbox Code Playgroud)
我不知道我应该怎么嘲笑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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用这些类的实际实例没有不良影响,并且您可以实际初始化它们,然后创建实际实例并将它们传递给被测函数。
如果使用实际实例没有不良影响,则它们不必是接口或模拟
//Arrange
//...omitted for brevity
var param1 = new TimerInfo(...);
var param2 = = new ExecutionContext {
InvocationId = Guid.NewGuid()
};
//Act
await funTimeTriggeredObj.Run(param1, param2, loggerMock.Object);
//Assert
//...assert expected behavior
Run Code Online (Sandbox Code Playgroud)
由于在这个测试用例中定时器甚至没有被函数使用,所以可以完全忽略它
//Arrange
//...omitted for brevity
var param1 = default(TimerInfo); //null
var param2 = = new ExecutionContext {
InvocationId = Guid.NewGuid()
};
//Act
await funTimeTriggeredObj.Run(param1, param2, loggerMock.Object);
//Assert
//...assert expected behavior
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3042 次 |
| 最近记录: |