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

Xav*_*eña 3 c# quartz.net

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

public void Execute(IJobExecutionContext context)
Run Code Online (Sandbox Code Playgroud)

问题:如何创建一个新的 IJobExecutionContext 类实例。或者甚至不创建新的作业,而只需从现有的预定作业中获取它。

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

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

我发现的只是这个具有相同问题的相关帖子。他所说的只是“通过仅将 JobDataMap 对象传递给我的方法来解决:context.MergedJobDataMap”,我似乎无法重现。另一个建议,即使用起订量,目前对我来说是遥不可及的。虽然如果这真的是唯一的方法,我会专注于这个解决方案。但我认为如果我先尝试寻找一种更简单的方法,这是合理的。

Jon*_*all 5

IJobExecutionContext是一个接口,这意味着您可以轻松创建它的模拟版本。要么使用 Mocking 框架,比如您提到的 Moq,要么创建一个仅用于测试的类

private class MockExecutionContext : IJobExecutionContext 
{


}
Run Code Online (Sandbox Code Playgroud)

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