【问题标题】:Why the java code isn't showing proper number of instances?为什么 java 代码没有显示正确数量的实例?
【发布时间】:2020-06-10 01:49:14
【问题描述】:

我在 freecodecamp 上关注Java tutorial,并编写了以下代码。 在这里,我创建了两个类:PersonTest.java 和 Person.java。我在 PersonTest.java 中编写了 3 个测试。 在编写前两个测试时,已经创建了两个 Person 类的实例。在计算创建的实例数的第三个测试中;我得到的输出为 1(我希望它是 2)。我不明白为什么会这样。任何帮助表示赞赏:)

PersonTest.java

package com.atharvajoshi.javacourse.lesson2;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class PersonTest {
    @Test
    public void shouldReturnHelloWorld() {
        Person atharva = new Person();                  // First instance
        assertEquals("Hello World", atharva.helloworld());
    }

    @Test
    public void shouldReturnHelloAtharva() {
        Person person = new Person();                   // Second instance
        assertEquals("Hello Atharva", person.hello("Atharva"));
    }


    @Test
    public void shouldReturnNumberOfPersons() {
        System.out.println(Person.numberOfPersons());   // Answer is coming to be 1
        assertEquals(2, Person.numberOfPersons());      // Test failed
    }
}

Person.java

package com.atharvajoshi.javacourse.lesson2;

public class Person {

    private static int personCounter = 0;

    public Person() {
        personCounter ++;
    }

    public String helloworld() {
        return "Hello World";
    }

    public String hello(String anyName) {
        return "Hello " + anyName;
    }

    public static int numberOfPersons() {
        return personCounter;
    }
}

输出:1

Output

【问题讨论】:

  • this 有帮助吗?
  • @Mandy8055 是的,感谢您的帮助。你能告诉我为什么我得到 numberOfPersons = 1 吗?我没有发现我的代码有什么问题。
  • 单元测试方法的运行顺序与它们在源代码中的顺序不同。可以强制它们按顺序运行,但最好以不依赖已运行的其他测试的方式编写测试方法
  • @Joni 我不知道这个!我正在努力找出我的代码有什么问题。谢谢!
  • 请将输出作为文本粘贴到您的问题中。

标签: java class oop junit annotations


【解决方案1】:

如果您没有在 JUnit 中指定顺序,那么测试的执行顺序是任意的。为了可视化这一点,请在您的代码中添加“内部方法 XX”的系统输出。如果您使用的是 IDE,添加调试器并调试 PersonTest java 类,您将知道执行顺序是任意的。如果你使用junit 4.x及以上版本,那么试试这个注解

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

这将按照方法名称的字母顺序执行测试用例

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2023-01-08
    • 2021-01-03
    相关资源
    最近更新 更多