JUnit @Test expected annotation not working

2020-01-31 02:49发布

I've got the following test:

@Test(expected = IllegalStateException.class)
public void testKey() {
    int key = 1;
    this.finder(key);
}

But JUnit reports, that the test fails, although it throws — as expected — an IllegalStateException.

Do I have to configure something else to make this run?


I run the test now with

@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {

}

like in this question, but am still not getting the desired result.

And when I remove the test prefix I'm still getting an error.

I gotta say that I run these tests with Eclipse, but it's configured to use the JUnit 4 Runner.

8条回答
ら.Afraid
2楼-- · 2020-01-31 03:03
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

I also had problems with @Test(expected = ...) annotation when I extended TestCase class in my base test. Using @RunWith(JUnit4.class) helped instantly (not an extremely elegant solution, I admit)

查看更多
在下西门庆
3楼-- · 2020-01-31 03:03

I faced same issue, solution is simple "Don't extends TestCase class"

查看更多
Explosion°爆炸
4楼-- · 2020-01-31 03:09

i tried this one, and work perfectly as expected.

public class SampleClassTest {
    @Test(expected = ArithmeticException.class )
    public void lost(){
        this.lost(0);
    }
    private void lost(int i) throws ArithmeticException {
        System.out.println(3/i);
    }
}

also ensure that junit4 is added as dependancy, @ (annotations) are new feature in junit 4.

查看更多
We Are One
5楼-- · 2020-01-31 03:10

This looks correct to me.

Check your assumptions. Are you sure it throws the exception? If what you say is true, removing the expected from the annotation should make it fail.

I'd be stepping through the code with a debugger to see what's going on. I'll assume you have an IDE that will do so, like IntelliJ.

查看更多
走好不送
6楼-- · 2020-01-31 03:11

I had the same problem I just changed my imports statements. I removed :

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

and added :

import org.junit.Test;

And it worked fine for me.

查看更多
够拽才男人
7楼-- · 2020-01-31 03:15

The problem was, that the class in which the test was nested was an extension of TestCase. Since this is JUnit 3 style, the annotation didn't work.

Now my test class is a class on its own.

查看更多
登录 后发表回答