定时器触发 Azure 函数的单元测试:提供测试数据
Unit Tests for timer triggered Azure Function: provide test data
使用测试数据对 HTTP 触发的 Azure Functions 进行单元测试已经很好而且经常被描述。例如这里:
How to write unit test for azure function v1
模拟数据在http请求中给出。
但我有一个计时器触发的 Azure 函数,它从 FTP 服务器读取数据。我想用测试数据对函数进行单元测试。
我的函数:
[FunctionName("MyTimerTriggeredFunction")]
public static void Run([TimerTrigger("0 */2 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
ServiceClass serviceClass = new ServiceClass(log, context);
List<Order> orderList = serviceClass.getOrdersFromFtp();
...
a 运行 用于测试记录器的单元测试功能,只是为了展示我是如何开始的:
public void TestLogger()
{
// https://docs.microsoft.com/de-de/azure/azure-functions/functions-test-a-function
var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
MyTimerTriggeredFunction.Run(null, logger, null);
var msg = logger.Logs[0];
bool testString = msg.Contains("C# Timer trigger function executed at");
Assert.IsTrue(testString);
}
serviceClass.getOrdersFromFtp() return 对象列表。我可以在单元测试中使用模拟数据创建此列表,但如何将其提供给计时器触发的 azure 函数?
您应该将业务逻辑移到 azure 函数之外并对其进行测试,而不是想出为 timer-triggered 函数模拟数据的方法。
您的代码将如下所示:
[FunctionName("MyTimerTriggeredFunction")]
public static void Run([TimerTrigger("0 */2 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
ServiceClass serviceClass = new ServiceClass(log, context);
serviceClass.DoWork();
...
class ServiceClass
{
public void DoWork()
{
List<Order> orderList = serviceClass.getOrdersFromFtp();
...
使用测试数据对 HTTP 触发的 Azure Functions 进行单元测试已经很好而且经常被描述。例如这里: How to write unit test for azure function v1
模拟数据在http请求中给出。
但我有一个计时器触发的 Azure 函数,它从 FTP 服务器读取数据。我想用测试数据对函数进行单元测试。
我的函数:
[FunctionName("MyTimerTriggeredFunction")]
public static void Run([TimerTrigger("0 */2 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
ServiceClass serviceClass = new ServiceClass(log, context);
List<Order> orderList = serviceClass.getOrdersFromFtp();
...
a 运行 用于测试记录器的单元测试功能,只是为了展示我是如何开始的:
public void TestLogger()
{
// https://docs.microsoft.com/de-de/azure/azure-functions/functions-test-a-function
var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
MyTimerTriggeredFunction.Run(null, logger, null);
var msg = logger.Logs[0];
bool testString = msg.Contains("C# Timer trigger function executed at");
Assert.IsTrue(testString);
}
serviceClass.getOrdersFromFtp() return 对象列表。我可以在单元测试中使用模拟数据创建此列表,但如何将其提供给计时器触发的 azure 函数?
您应该将业务逻辑移到 azure 函数之外并对其进行测试,而不是想出为 timer-triggered 函数模拟数据的方法。
您的代码将如下所示:
[FunctionName("MyTimerTriggeredFunction")]
public static void Run([TimerTrigger("0 */2 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
ServiceClass serviceClass = new ServiceClass(log, context);
serviceClass.DoWork();
...
class ServiceClass
{
public void DoWork()
{
List<Order> orderList = serviceClass.getOrdersFromFtp();
...