我正在学习敏捷练习课程并且我有一份功课。在课程中,我学习了如何使用FIT进行自动验收测试。从我所看到的情况来看,FIT似乎正在消亡,而且我不再确定这是我想用于家庭作业的技术。总之...
我有遗留系统进行测试,所有设计都很糟糕/编码。当然没有测试,在编写任何验收测试之前,我不允许重构或更改功能。
为简单起见,我们假设系统是一个商店收据系统,它打印产品清单(含价格)和标准输出流的总成本。像这样:
public class ReceiptSystem
{
List<Product> boughtProducts = new ArrayList<Product>();
public void buyProduct(Product p)
{
boughtProducts.add(p);
}
public void printReceipt()
{
List<ReceiptLine> receipt = new ArrayList<ReceiptLine>();
int total = 0;
int price;
for(List<Product> boughtProducts : boughtProduct)
{
price = SomeThirdPartyClass.calculatePrice(boughtProduct.getBarcode());
System.out.println(boughtProduct + ": " + price);
total += price;
}
System.out.println("TOTAL: " + total);
}
}
问题是价格是由带有外部库的第三方系统计算的,所以我不了解它们,我发现使用FIT编写验收测试很困难(如果不是不可能)。在正常情况下,我会做类似的事情:
购物清单(输入):
-------------------
| product's barcode |
-------------------
| 111111111 |
-------------------
| 123456789 |
-------------------
| 987654321 |
-------------------
| 999999999 |
-------------------
收据(预期产出):
------------------
| receipt |
------------------
| 111111111: 1.99 |
------------------
| 123456789: 2.99 |
------------------
| 987654321: 3.99 |
------------------
| 999999999: 4.99 |
------------------
| TOTAL: 13.96 |
------------------
但是如何在不知道价格的情况下实现这一目标呢?采用的最佳策略是什么?有没有其他框架来实现这个目标?
谢谢。
更新: SomeThirdPartyClass
为final
,尝试模拟它或为其编写代理类会产生以下错误:
不能继承最终类Class SomeThirdPartyClass
此外,它是不可变的,而公共构造函数没有参数。好像老师故意这样做了......