java 中的单元测试调度程序作业
Unit Testing Scheduler job in java
我们的应用程序中有一个基于 cron 的作业。
作业class如下:
public class DailyUpdate implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
testMethod();
}
private void testMethod()
{
System.out.pritnln("Executed From scheduler");
}
}
我们应该如何编写单元测试用例来测试方法
测试方法()
我不能在没有调度程序的情况下直接调用 testMethod,因为它是私有的。关于如何为调度程序编写单元测试用例的任何建议
为了编写测试,您需要具有预期的行为,因此测试什么都不做的方法没有意义。
现在解决你的主要问题。如果您有一些遗留应用程序,并且不允许更改方法的可见性,那么测试私有方法的最佳方法是使用 reflection。
所以你可以使用下面的模式
Method testMethod = DailyUpdate.getDeclaredMethod(testMethod, argClasses);
testMethod .setAccessible(true);
return testMethod.invoke(targetObject, argObjects);
另见这个问题how to test a class that has private methods fields or inner classes
如果有机会,我建议您使用 PowerMock(而不是自己编写代码)。
这里有一个 link 解释如何使用它:How to mock private method for testing using PowerMock?
我们的应用程序中有一个基于 cron 的作业。
作业class如下:
public class DailyUpdate implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
testMethod();
}
private void testMethod()
{
System.out.pritnln("Executed From scheduler");
}
}
我们应该如何编写单元测试用例来测试方法 测试方法()
我不能在没有调度程序的情况下直接调用 testMethod,因为它是私有的。关于如何为调度程序编写单元测试用例的任何建议
为了编写测试,您需要具有预期的行为,因此测试什么都不做的方法没有意义。
现在解决你的主要问题。如果您有一些遗留应用程序,并且不允许更改方法的可见性,那么测试私有方法的最佳方法是使用 reflection。
所以你可以使用下面的模式
Method testMethod = DailyUpdate.getDeclaredMethod(testMethod, argClasses);
testMethod .setAccessible(true);
return testMethod.invoke(targetObject, argObjects);
另见这个问题how to test a class that has private methods fields or inner classes
如果有机会,我建议您使用 PowerMock(而不是自己编写代码)。 这里有一个 link 解释如何使用它:How to mock private method for testing using PowerMock?