c# - 单元测试 quartz-dot-net (Quartz.Net) 执行函数

标签 c# quartz.net

我想测试我的 Quartz.Net 作业的执行函数,它实现了 Quartz.IJob:

public void Execute(IJobExecutionContext context)

问题:如何创建一个新的 IJobExecutionContext 类实例。或者甚至不创建一个新的,而是从一个已经存在的预定作业中获取它。

目标是创建一个测试,例如:

[Test()]
public void Test()
{
    IJobExecutionContext jobExecutionContext = ???; //get a defined JobExecutionContext somehow...
    m_myJob.Execute(jobExecutionContext);
}

我找到的所有内容都是 this related post有同样的问题。他所说的只是“通过仅将 JobDataMap 对象传递给我的方法来解决:context.MergedJobDataMap”,我似乎无法重现。而另一个提议,即最小起订量的使用,目前对我来说是遥不可及的。虽然如果它真的是唯一的方法,我会专注于这个解决方案。但我认为如果我先尝试找到一种更简单的方法是合理的。

最佳答案

IJobExecutionContext 是一个接口(interface),这意味着您可以轻松创建它的模拟版本。通过使用 Mocking 框架,如您提到的 Moq,或者通过创建一个仅用于您的测试的类

private class MockExecutionContext : IJobExecutionContext 
{


}

您将需要实现接口(interface)的所有成员,并为它们提供测试所需的行为,但编译器/智能感知会帮助您完成此操作。根据您正在测试的内容,您应该能够为大多数成员提供“ stub ”实现,这些实现除了满足成员签名外什么都不做。

关于c# - 单元测试 quartz-dot-net (Quartz.Net) 执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303039/

相关文章:

quartz.net - 从 Quartz.Net 1.x 迁移到 2.x 时,我是否必须更改调度程序的配置和启动方式?

quartz.net - 同一个 Job Quartz.NET 的多个触发器

c# - 在 Quartz.net 中处理 JobExecutionException

c# - 使用 ParameterBuilder 将自定义属性添加到返回值;反射时属性不显示——为什么?

c# - 在打开表单之前设置所有标签字体

c# - 为什么我不能在我的代码 asp.net c# 中使用来自 app_code 的代码文件

c# - NHibernate 3.1 与 Linq 的迁移问题

c# - 将另一个应用程序置于最前面

c# - 尝试从另一个类调用 Form 中的方法

c# - 避免 quartz 表失误