Java JUNIT测试-为什么构造函数被调用了两次

Java JUNIT测试-为什么构造函数被调用了两次,java,junit,Java,Junit,正如我的类名所示:我想测试一下,我的类是否是迭代器的实例。因此,我想知道,如果它只需要实现接口就可以做到这一点,这似乎已经足够了 但是,当我通过JUNIT测试运行以下类时,我得到了以下控制台输出: Do something! Do something! I did something! 似乎类构造函数被调用了两次!但是我不知道第二个电话是从哪里打来的。我已经测试了“if”参数的变化,以排除,instanceof有故障,如 // if (a instanceof Object) { // i

正如我的类名所示:我想测试一下,我的类是否是迭代器的实例。因此,我想知道,如果它只需要实现接口就可以做到这一点,这似乎已经足够了

但是,当我通过JUNIT测试运行以下类时,我得到了以下控制台输出:

Do something!

Do something!

I did something!
似乎类构造函数被调用了两次!但是我不知道第二个电话是从哪里打来的。我已经测试了“if”参数的变化,以排除,
instanceof
有故障,如

// if (a instanceof Object) {
// if (a instanceof Iterator) {
// if (2 > 3) {
然而,在所有3个病例中都被称为。因此,我假设单元测试首先尝试,需要为自己创建一个类的对象来执行所有测试,因为它们是类的一部分。这是正确的(?)


test1()
是类
InstanceOfIteratorTest
的实例方法,因此是的,JUnit需要先创建实例,然后调用该方法。实例就是这样工作的。

在Java中,如果不创建对象并调用构造函数,就不可能调用非静态方法。当然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!");
    }
}

在这种情况下,“做点什么!”只打印一次。

我可以在8分钟内接受答案,并将在8分钟内接受答案(如果这对您合适的话)
@Test
public void test1() {
    if (this instanceof Iterator) {
        System.out.println("I did something!");
    } else {
        System.out.println("I did nothing!");
    }
}