【发布时间】:2015-03-08 23:00:26
【问题描述】:
想象一下有以下类:
public class Product {
private String name;
private double price;
// Constructors, getters and setters
}
public class Products {
private List<Product> products;
// CRUD methods
public double getTotalPrice() {
// calculates the price of all products
}
}
我已经读过在单元测试中应该避免条件逻辑(if 和循环),但不明白为什么,更重要的是如何。如何有效地测试我在Products 中添加一些不同价格的产品,然后在不使用循环的情况下验证getTotalPrice() 的结果的场景?
【问题讨论】:
-
为什么不直接用三个语句明确添加(比如说)3 个不同的产品?无论如何,这可能比循环更简单。
-
我相信不会有问题,但我想了解它背后的意义。如果我想用更多项目测试它怎么办?如果计算更复杂怎么办?一般来说,我想了解我应该如何验证在一个类中完成的操作,该类使用项目列表计算特定值,以及如何避免迭代测试用例中作为参数给出的所有项目。
-
为什么要迭代 test 代码?您可能会在 real 代码中进行迭代,但在测试代码中,您可能只是硬编码总和或将其显式为 5+10+20 或其他。并不是说我认为迭代必然是测试中的一个问题——尽管
if条件至少很少见。不过,我建议不要太教条。我比较关心double用于货币数据... -
"您可以在真实代码中进行迭代,但在测试代码中您可能只是硬编码总和或将其明确为 5+10+20 或其他。"这可能回答了我的问题。并不是说我在测试当前案例时遇到问题,而是我宁愿理解为什么在不同的来源中说明应该避免条件逻辑。我还想知道如何测试方法,需要来自列表中不同对象的信息。
标签: java unit-testing testing junit automated-tests