JUnit file
public class SomeClassTest {
...
@Test
public void testSomeContextFailure() throws Exception {
SomeClass sc = new SomeClass();
try {
sc.SomeContext(null,null);
fail("IllegalArg expected");
} catch (IllegalArgumentException e) {}
}
@Test
public void testSomeContextSuccess() throws Exception {
SomeClass sc = new SomeClass();
SomeContext in = new SomeContext();
in.setName("something");
in.setId("5");
in.setPoints(SomePoint.X);
try {
assertNotNull(sc.SomeContext(in,null));
} catch (Exception e) {}
}
}
Java File
public class SomeClassTest {
@Autowired(required = true)
private InsuredDAO insuredDAO;
@Override
public context SomeContext(context c, unused u) throws Exception {
if(c == null)
throw new IllegalArgumentException();
insuredDAO.increaseValue(c);
if(c.getPoints() != null) {
...do something
}
return c;
}
In java file if(c == null)
was highlighted yellow with message saying 1 of 2 branches not covered.
throw new IllegalArgumentException();
highlighted green
insuredDAO.increaseValue(c);
Everything on and below this line is red
What am I missing? (JUnit test was passed on both but why it isn't covered)?
Might be a bit too late, but if someone else comes across this...
First:
You have two tests of which one of them fails. As the only test, that went through, tested the "null" value, eclemma marks the if statement as "partially covered". -> null check was tested, but with the given Object, it was not.
It doesn't work that way like a debugger "the test ran up until this line, then it failed, but everything it did until this stage will be analyzed". eclemma just analyzes fully run (and succeeded) tests.
Second:
In your class you have
insuredDAO.increaseValue(c);
, which is autowired. In my tests I have to mock this Object, otherwise it will fail with aNullPointerException
at that line because autowiring is not done in junit tests, thereforeinsuredDAO
is null and the method call will throw aNullPointerException
.Should have popped up in your IDE, though ;)