【问题标题】:Java Constructor being called multiple timesJava 构造函数被多次调用
【发布时间】:2016-08-31 03:27:51
【问题描述】:

我正在创建一个 PokerHand 类并使用 JUnit 测试对其进行测试,由于某种原因,当我在一个测试方法中调用它时,当我创建一个 PokerHand 对象时,我的构造函数被调用了 8 次。

PokerHand 构造函数(添加了一条打印语句来查看它被调用了多少次,分别打印 8 次):

//Constructor
public PokerHand (Card cardOne, Card cardTwo, Card cardThree, Card cardFour, Card cardFive) {
    System.out.println("creating hand...");
    //Initialize value array
    value = new int[6];
    //Initialize cards list, add cards, and check for duplicates
    cards = new ArrayList<Card>();

    cards.add(cardOne);
    if (cards.contains(cardTwo)) {
        throw new DuplicateCardException();
    } else cards.add(cardTwo);
    if (cards.contains(cardThree)) {
        throw new DuplicateCardException();
    } else cards.add(cardThree);
    if (cards.contains(cardFour)) {
        throw new DuplicateCardException();
    } else cards.add(cardFour);
    if (cards.contains(cardFive)) {
        throw new DuplicateCardException();
    } else cards.add(cardFive);

    determineValueOfHand();
}

测试用例:

    @Test
  public void testFlush() {
      PokerHand a = new PokerHand(D10, DJ, DQ, DK, DA);
  }

我已经盯着屏幕看了一段时间,而且我是 JUnit 测试和 eclipse 的新手,所以我确定我只是遗漏了一个小细节。非常感谢任何帮助

【问题讨论】:

  • 你的测试课还有什么?必须是其他内容,例如,D10 未在此处声明。
  • 您能否提供包含您的测试的类的完整代码?
  • 请转到帮助中心;并阅读有关创建 minimal viable 示例的信息。您不想发布 all 您的代码。但是可以编译并显示问题的代码。 (并且记录在案:创建这样一个示例的活动通常会消除在这里询问的需要;因为这通常会让你自己找到你的错误——因为你试图隔离它)。
  • 另一个提示:将您的 println 更改为 ("PokerHand ctor " + this) - 例如,您要确保 determineValueOfHand() 不会创建 other PokerHand 对象!因此,查看创建了哪些 PokerHand 对象会有所帮助;你也可以在你的测试用例中为 a 做一个 println!
  • 您还可以打印堆栈跟踪以查看调用构造函数的内容。

标签: java eclipse unit-testing junit constructor


【解决方案1】:

根据您的评论解决问题的提示:可能您的方法 determineValueOfHand() 错误地创建了 other PokerHand 对象。

为了检查;我建议

  1. 你的构造函数
  2. 你的测试用例

使用对象引用执行 println()s。除此之外,您可以将进入/退出跟踪放入您的ctor!这使得构造函数调用发生的顺序变得更加明显。

【讨论】:

  • 或者在构造函数中放置断点,当它中断时在调试器中检查调用堆栈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多