In TestNG (or JUnit), it's simple. Goes something like:
@Test(expectedExceptions = NullPointerException)
public void test() throws NullPointerException {
String x = null;
String y = "y";
Assert.assertEquals(x.someMethod(), y);
}
Above test will pass since String x
is null
and a NullPointerException is thrown.
But in MRUnit, the assertion works differently. Following is a test method for a mapper class:
@Test(expectedExceptions = Data.InvalidDataException.class)
public void testFirstCatch() throws Exception {
Data data = someData;
MapDriver.newMapDriver(mapper)
.withInput(new LongWritable(0), someData)
.withOutput(someKey, NullWritable.get())
.runTest();
It takes an input with someData
and expects the output with someKey
. But I need to cover a Try/Catch block where it checks for someData
's validity by feeding bad data. In this case, it seems like .withOutput
method isn't even necessary. Is there a way in MRUnit to conveniently test for Exceptions
?
Just had to do .run();
instead of .runTest();
. Hope this helps someone.