正如我的班级名字所示:如果我的班级是Iterator的一个实例,我想测试一下。因此,我想知道,如果它只需要实现接口这样做,似乎就足够了。
但是,当我通过JUNIT Test运行以下类时,我得到了以下控制台输出:
Do something!
Do something!
I did something!
似乎类构造函数被调用了两次!但是我不知道第二个电话来自哪里。我已经测试了“if”参数的变体来排除,instanceof
有错,比如
// if (a instanceof Object) {
// if (a instanceof Iterator) {
// if (2 > 3) {
然而,在所有3个案例中都被调用了。因此,我假设单元测试首先尝试,需要为自己创建一个类的对象来执行所有测试,因为它们是类的一部分。这是正确的(?)
import java.util.Iterator;
import org.junit.Test;
public class InstanceOfIteratorTest implements Iterator {
@Test
public void test1() {
InstanceOfIteratorTest a = new InstanceOfIteratorTest();
if (a instanceof Iterator) {
System.out.println("I did something!");
} else {
System.out.println("I did nothing!");
}
}
public InstanceOfIteratorTest() {
System.out.println("Do something!");
}
@Override
public boolean hasNext() {
throw new java.lang.UnsupportedOperationException("blub");
}
@Override
public Integer next() {
throw new java.lang.UnsupportedOperationException("blub");
}
@Override
public void remove() {
throw new java.lang.UnsupportedOperationException("blub");
}
}
答案 0 :(得分:2)
test1()
是类InstanceOfIteratorTest
的实例方法,所以是的,JUnit需要先创建实例,然后调用该方法。这就是实例的运作方式。
答案 1 :(得分:1)
在Java中,如果没有create Object并调用construstor,则无法调用非静态方法。当然,Junit必须调用construstor,所以真正的代码:
在Junit:
...
InstanceOfIteratorTest l = new InstanceOfIteratorTest(); // print "Do something!"
l.test1();
在l.test1:
InstanceOfIteratorTest a = new InstanceOfIteratorTest(); // print "Do something!"
if (a instanceof Iterator) {
System.out.println("I did something!"); // print "I did something!"
} else {
System.out.println("I did nothing!");
}
您可以将代码更改为:
@Test
public void test1() {
if (this instanceof Iterator) {
System.out.println("I did something!");
} else {
System.out.println("I did nothing!");
}
}
在这种情况下“做点什么!”只打印一次。