我想测试我的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”,我似乎无法重现。另一个命题,即Moq的使用,对我来说是遥不可及的。虽然如果真的是唯一的方法,我会专注于这个解决方案。但我认为如果我试图先找到一种更简单的方法是合理的。
答案 0 :(得分:3)
IJobExecutionContext 是一个界面,这意味着您可以轻松地创建它的模拟版本。通过使用Mocking框架,如你提到的Moq,或者创建一个仅用于测试的类
private class MockExecutionContext : IJobExecutionContext
{
}
您将需要实现接口的所有成员,并为他们提供测试所需的行为,但编译器/智能感知将帮助您解决此问题。根据您正在测试的内容,您应该能够为大多数成员提供' stub'除了满足成员签名之外什么都不做的实现。