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
TestRunnersassertAllFlowFilesTransferred
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.