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.