我想测试我的 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”,我似乎无法重现。另一个建议,即使用起订量,目前对我来说是遥不可及的。虽然如果这真的是唯一的方法,我会专注于这个解决方案。但我认为如果我先尝试寻找一种更简单的方法,这是合理的。
IJobExecutionContext是一个接口,这意味着您可以轻松创建它的模拟版本。要么使用 Mocking 框架,比如您提到的 Moq,要么创建一个仅用于测试的类
private class MockExecutionContext : IJobExecutionContext
{
}
Run Code Online (Sandbox Code Playgroud)
您将需要实现接口的所有成员,并为它们提供测试所需的行为,但编译器/智能感知将帮助您完成此操作。根据您正在测试的内容,您应该能够为大多数成员提供“存根”实现,这些实现除了满足成员签名之外什么也不做。
| 归档时间: |
|
| 查看次数: |
5643 次 |
| 最近记录: |