无法理解如何编写Junit测试

时间:2019-02-24 14:18:19

标签: java junit

public Card(final int theValue, final int theSuit) {
    this.value = theValue;
    this.suit = theSuit;
}

/**
 * Returns the suit of this card.
 * @returns the suit, which is one of the constants Card.SPADES, 
 * Card.HEARTS, Card.DIAMONDS, Card.CLUBS, or Card.JOKER
 */
public int getSuit() {
   return suit;
}

我不明白如何为getSuit()正确编写测试。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您应该做的是确保getSuit()始终返回有效值,该值已在方法说明中指出:

@returns the suit, which is one of the constants Card.SPADES, 
Card.HEARTS, Card.DIAMONDS, Card.CLUBS, or Card.JOKER

想像一下,如果您获得的价值不是其中一个,您会感到惊讶。代码应始终仅执行您期望得到的结果。这就是所谓的“最少惊喜”的原则。

当然,在当前代码中的当前构造函数中指定无效的匹配很容易。您不应让您的对象进入无效状态,因此应确保构造函数不接受其他任何值。别忘了也禁止值。如果诉讼整数超出范围,则抛出IllegalArgumentException。不接受无效值是快速失败的原则。

使用注释中指定的枚举肯定会对此有所帮助,因为您不能为它分配超出定义范围的任何值。不要忘记枚举值是对象,保存它们的参数/变量可以是null,这也是您不希望接受或返回的值。

请注意,正因为如此,正在测试的真正方法是构造函数,因为在getter中不会执行任何计算或操作;您绝对不应该在getter中抛出异常(如果可以避免的话)。