JUnit测试无法找到我想要测试的方法

时间:2016-02-25 20:38:58

标签: java junit

下面是包含方法" IntRelation"的(不完整的)代码。我想测试它是否会抛出异常。

public abstract class IntRelation {

    public IntRelation(final int n) throws IllegalArgumentException {
        if (n < 0) {
            throw new IllegalArgumentException ("Parameter in precondition violated.");
        }
    }
}

下面是(不完整的)代码段,其中包含&#34; IntRelation&#34;的测试用例。方法

public abstract class IntRelationTestCases {

    protected IntRelation instance;

    @Test
    public void testException0() {
        Class expected = IllegalArgumentException.class;
        instance.IntRelation(-1);
    }
}

我遇到的问题是,在第二段代码中,NetBeans / JUnit说它无法找到方法&#34; IntRelation&#34;。我做错了什么?

1 个答案:

答案 0 :(得分:5)

那是真的。这是因为您正在调用类似构造函数的方法;不要这样做。

我想你想做的是instance = new IntRelation(...);

或者你的意思是实际上是一种方法,在这种方法中,由于缺少返回类型,你还没有正确定义它。

public void IntRelation(...)应该在这方面做到这一点。

但是,您有一个未经实例化的instance问题会导致您NullPointerException

如果您想要设置一些数据来测试它,那么使用注释就可以为测试做好准备。

示例:

@Before
public void setUp() {
    // Since your class is abstract you can do it like this
    // to get an anonymous class you can test that non-abstract
    // method with...
    instance = new IntRelation() { };
}

然后像往常一样从测试单位调用它。

@Test
public void testException0() {
    ...
    instance.IntRelation(-1);
}

我会说,但是,命名一个与其类名相同的方法似乎可能令人困惑。另外,它反对Java命名约定来命名具有前导上限的方法;第一封信应该是小写的,其余的应该是骆驼。例如,thisIsTheCorrectWay(...)