gpt4 book ai didi

java - 为 Java 中的每个单元测试重新初始化枚举值

转载 作者:行者123 更新时间:2023-12-01 06:42:06 25 4
gpt4 key购买 nike

我为自动售货机的 SnackType 编写了一个枚举类,其中包含数量和价格。我希望每次调用新测试时都会重新初始化数量。然而,我遇到的问题是,如果测试更改了数量值,则更改后的值将延续到下一个测试。


public enum SnackType{
CHIPS(20, 1), CHOCOLATE(20, 2), CHEWING_GUM(20, .5);
int amount;
final double price;
SnackType(int quantity, double price)
{
this.amount = quantity;
this.price = price;
}

public int quantity(){
return this.amount;
}
public double getPrice(){
return this.price;
}
public void subquantity()
{
this.amount -= 1;
}

}

这是我的测试的一些示例

 @Test
void buying_unavailable_quantity_of_a_snack_should_fail() {
while (snackMachine.chewingGums().quantity() > 0) {
snackMachine.insertMoney(Money.QUARTER_DINAR);
snackMachine.insertMoney(Money.QUARTER_DINAR);

snackMachine.buySnack(SnackType.CHEWING_GUM);
}

insertMoney()不用担心这个函数buySnack()该函数减去数量

Money buySnack(SnackType snack){
if(snack.quantity()==0){
throw new IllegalStateException("can't buy snack quantity zero");
}
else if (this.CUSTOMERS_MONEY.value.doubleValue() >= snack.getPrice()){
snack.subquantity();

}

我知道口香糖的数量在本次测试结束时会变成 0,然后测试就会失败,但我不希望 0 继续到其他测试中。

最佳答案

枚举值从一开始就不应该是可变的。来自 the Oracle tutorial (强调):

An enum type is a special data type that enables for a variable to be a set of predefined constants.

如果您想要与枚举键关联的可变值,请使用Map。您可以使用任何类型的 Map(例如 HashMapTreeMap),但因为键是 Enum ,最好的选择是EnumMap:

EnumMap<SnackType, Integer> quantities = new EnumMap<>(SnackType.class);

关于java - 为 Java 中的每个单元测试重新初始化枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com