Sometimes, the provided MiniJavaTestBuilder
assertions
don't meet your exact use case. In those cases, you can use:
assertSystemOut(Consumer<String> consumer)
,assertSystemErr(Consumer<String> consumer)
,assertExitsWith(int exitStatus)
, orassertExecutionResult(Consumer<ExecutionResult> consumer)
For example, if we want to assert on the number of lines of errors printed matches some expected number, we can implement a custom assertion like this using a lambda expression :
int expectedNumberOfLines = ...; new MiniJavaTestBuilder() .assertSystemErr(systemErr -> { // your code goes here int numberOfLines = systemErr.split("\n").length; assertEquals(expectedNumberOfLines, numberOfLines); }) .testCompiler(...);
ExecutionResult
stores the contents printed to
System.out
, System.err
, and the exit status.
You can use it to perform assertions on all/some of them, such as that
System.out
matches System.err
and their length
combined equals to the exit status:
new MiniJavaTestBuilder() .assertExecutionResult(result -> { String stdout = result.systemOut(); String stderr = result.systemErr(); int exitStatus = result.exitStatus(); assertEquals(stderr, stdout); assertEquals(exitStatus, stderr.length() + stdout.length()); }) .testCompiler(...);
MiniJavaTestBuilder
is built on top of
CSE401TestingUtils
, the collection of more generic testing
utility methods. You do not need to understand what is available or
how to use them, but they can be helpful if you want to implement a more
customized testing infrastructure. To learn more, you can read
the JavaDoc comments of CSE401TestingUtils
for the list of methods and their example usages.