Validate Output
After a Processor has finished running, a unit test will generally want to validate that the FlowFiles went where they were expected to go. This can be achieved using the TestRunners
assertAllFlowFilesTransferred
and assertTransferCount
methods. The former method takes as arguments a Relationship and an integer to dictate how many FlowFiles should have been transferred to that Relationship. The method will fail the unit test unless this number of FlowFiles were transferred to the given Relationship or if any FlowFile was transferred to any other Relationship. The assertTransferCount
method validates only that the FlowFile count was the expected number for the given Relationship.
After validating the counts, we can then obtain the actual output FlowFiles via the getFlowFilesForRelationship
method. This method returns a List<MockFlowFile>
. It's important to note that the type of the List is MockFlowFile
, rather than the FlowFile
interface. This is done because MockFlowFile
comes with many methods for validating the contents.
For example, MockFlowFile
has methods for asserting that FlowFile Attributes exist (assertAttributeExists
), asserting that other attributes are not present (assertAttributeNotExists
), or that Attributes have the correct value (assertAttributeEquals
, assertAttributeNotEquals
). Similar methods exist for verifying the contents of the FlowFile. The contents of a FlowFile can be compared to a byte[]
, and InputStream
, a file, or a String. If the data is expected to be textual, the String version is preferred, as it provides a more intuitive error message if the output is not as expected.