Java JUnit测试可以';我找不到我想要测试的方法

Java JUnit测试可以';我找不到我想要测试的方法,java,junit,Java,Junit,下面是包含方法“IntRelation”的(不完整)代码段,我想测试它是否抛出异常 public abstract class IntRelation { public IntRelation(final int n) throws IllegalArgumentException { if (n < 0) { throw new IllegalArgumentException ("Parameter in precondition vi

下面是包含方法“IntRelation”的(不完整)代码段,我想测试它是否抛出异常

public abstract class IntRelation {

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

我遇到的问题是,在第二段代码中,NetBeans/JUnit说它找不到方法“IntRelation”。我做错了什么?

没错。这是因为你调用构造函数就像调用方法一样;不要那样做

我想你想做的是
instance=newintrelation(…)

或者您的意思是实际上是一个方法,在这种情况下,由于缺少返回类型,您没有正确定义它

公共关系(…)
应该做到这一点

但是您会遇到一个未实例化的
实例的问题,这将导致出现
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命名约定的;第一个字母应为小写,其余字母应为驼色。例如,
这是正确的方式(…)

这是正确的。这是因为你调用构造函数就像调用方法一样;不要那样做

我想你想做的是
instance=newintrelation(…)

或者您的意思是实际上是一个方法,在这种情况下,由于缺少返回类型,您没有正确定义它

公共关系(…)
应该做到这一点

但是您会遇到一个未实例化的
实例的问题,这将导致出现
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命名约定的;第一个字母应为小写,其余字母应为驼色。例如,
这是正确的方法(…)

谢谢你的回答。您的意思是在第二段代码中,我应该这样写:“protected IntRelation instance=new InRelation();”?我添加了您的代码,现在代码中的“IntRelation”用红线下划线,并表示“实现所有抽象方法”。如果我点击它,我会看到另一个错误,上面写着“将匿名转换为成员”?啊,刚刚注意到它是抽象的。这真的有必要吗@知识范围你不能实例化一个接口或抽象类,所以你需要让它不是这样,或者提供一个具体的实现。是的,它必须是抽象的。如何在JUnit中实现具体的实现@谢谢你的回答。您的意思是在第二段代码中,我应该这样写:“protected IntRelation instance=new InRelation();”?我添加了您的代码,现在代码中的“IntRelation”用红线下划线,并表示“实现所有抽象方法”。如果我点击它,我会看到另一个错误,上面写着“将匿名转换为成员”?啊,刚刚注意到它是抽象的。这真的有必要吗@知识范围你不能实例化一个接口或抽象类,所以你需要让它不是这样,或者提供一个具体的实现。是的,它必须是抽象的。如何在JUnit中实现具体的实现@酋长给我们铅笔。