使用嵌套依赖项测试 Nifi class

Testing Nifi class with nested dependency

如何在 Apache Nifi 中为 org.apache.nifi.processors.standard.ValidateRecord 处理器编写 junit? 这是我的代码

@Test
public void valiateRecordTest() throws IOException {

       ValidateRecord validateRecord = new ValidateRecord();
       
       TestRunner runner = TestRunners.newTestRunner(validateRecord); 
       String inputJson = IOUtils.toString(this.getClass().getResourceAsStream("validateRecordInput.json"));
       String inputSchema = IOUtils.toString(this.getClass().getResourceAsStream("validateRecordInputSchema.json"));
       String expectedResult = IOUtils.toString(this.getClass().getResourceAsStream("validateRecordOutput.json"));
       
       //runner.setProperty(ValidateRecord.SCHEMA_REGISTRY, inputSchema);
       MockRecordParser reader = new MockRecordParser();
       runner.addControllerService("reader", reader);           
       runner.setProperty("Record Reader","JsonTreeReader");
       runner.setProperty("Record Writer","JsonRecordSetWriter");
       runner.setProperty("service", "reader");
       
       runner.setProperty(reader,"Schema Registry","AvroSchemaRegistry"); //for JsonTreeReader
       runner.setProperty(reader,"Schema Text",inputSchema); //for JsonRecordSetWriter
       runner.enableControllerService(reader);
       runner.enqueue(inputJson);
       runner.run(1);
       runner.assertQueueEmpty();
       List<MockFlowFile> resultList = runner.getFlowFilesForRelationship("valid");         
       ........
}

JsonTreeReader 有其他参数,如 Avro 模式。我该如何设置? (因为我没有在这里传递 JsonTreeReader 的实例)。我收到以下错误

'Record Reader' is invalid because Record Reader is required
'Record Writer' is invalid because Record Writer is required
'Record Reader' validated against 'JsonTreeReader' is invalid because 'Record Reader' is not a supported property or has no Validator associated with it
'Record Writer' validated against 'JsonRecordSetWriter' is invalid because 'Record Writer' is not a supported property or has no Validator associated with it

TestRunner 具有用于添加和启用控制器服务的方法。像这样:

def reader = new MockRecordParser()
runner.addControllerService("reader", reader)
runner.setProperty(SomeDescriptor, "reader")
runner.enableControllerService(reader)

您可以像这样设置属性:

runner.setProperty(reader, DESCRIPTOR_HERE, "myvalue")