Reputation: 3281
I have a wierd problem, I am trying to test a method and expecting it to throw java.util.NoSuchElementException. Here's my test code:
@Test(expected = NoSuchElementException.class)
public void testLineWithoutCommas(){
String lineToTest = "[email protected]";
List<String> linesToTest = new ArrayList<String>();
linesToTest.add(lineToTest);
applicationChecker = new ApplicationChecker();
applicationChecker.getLinesFromFile(linesToTest);
applicationChecker.getDetailsFromLine(applicationChecker.getLines().get(0));
}
Stack trace looks as expected:
java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at java.util.StringTokenizer.nextElement(Unknown Source)
at com.scottlogic.cat.util.ApplicationChecker.getDetailsFromLine(ApplicationChecker.java:34)
at com.scottlogic.cat.utils.ApplicationCheckerTest.testLineWithoutCommas(ApplicationCheckerTest.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
and more boring stuff...
and finally jUnit:
java.lang.AssertionError: Expected exception: java.util.NoSuchElementException
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:32)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
and blah blah blah...
Any ideas what's wrong? Thanks for any help.
Upvotes: 1
Views: 2375
Reputation: 51
Try it
@Rule
public ExpectedException exc = ExpectedException.none();
@Test
public void testLineWithoutCommas(){
exc.expect(NoSuchElementException.class);
// method have exception
}
Upvotes: 0
Reputation: 1887
Check you aren't catching and handling the NoSuchElementException somewhere in your code. The first stacktrace could be due to your code catching the exception, then logging it, and throwing it as something else, or just trapping it and not throwing it at all. the 'expected' will only catch exceptions thrown from the test itself, it doesn't deal with exceptions throws and dealt with part way through your code.
Upvotes: 3