NiFi:如何开发NiFi控制器服务的JUnit测试?

NiFi:如何开发NiFi控制器服务的JUnit测试?,junit,apache-nifi,Junit,Apache Nifi,我正在开发一个NiFi控制器服务,该控制器服务具有另一个控制器服务的属性,即dbcpservice。 根据github.com/apache/nifi中的源代码,控制器服务测试也依赖于处理器测试,即定义一个具有自定义控制器服务属性的TestProcessor,然后通过该处理器操作控制器服务。 但是在我的例子中,我的控制器服务的属性是另一个控制器服务DBCPService,我不知道如何编写junit测试来设置控制器服务。您可以通过匿名内部类或测试中的命名类来创建一个简单的处理器,以便执行控制器服务

我正在开发一个NiFi控制器服务,该控制器服务具有另一个控制器服务的属性,即dbcpservice。 根据github.com/apache/nifi中的源代码,控制器服务测试也依赖于处理器测试,即定义一个具有自定义控制器服务属性的TestProcessor,然后通过该处理器操作控制器服务。
但是在我的例子中,我的控制器服务的属性是另一个控制器服务DBCPService,我不知道如何编写junit测试来设置控制器服务。

您可以通过匿名内部类或测试中的命名类来创建一个简单的处理器,以便执行控制器服务的行为。例如,通过在测试类旁边定义TestProcessor来实现这一点。测试处理器所需要的只是一个属性描述符,它接受与测试SUT下的系统相同类型的控制器服务——在本例中是您的自定义控制器服务

如果您询问如何从这里开始配置自定义服务CustomService,请将参数传递给TestRunner实例,如下所示:

final TestRunner runner = TestRunners.newTestRunner(TestProcessor.class);
final CustomService service = new CustomService();
service.setNestedService(new NestedService());
final Map<String, String> properties = new HashMap<String, String>();
runner.addControllerService("custom-service-id", service, properties);

除了Andy的答案之外,您还可以使用Mockito创建一个测试处理器:

AbstractProcessor processor = new Mockito().spy(AbstractProcessor.class);
TestRunner testRunner = TestRunners.newTestRunner(processor);