<分区>
我正在学习敏捷实践类(class),并且有作业。在类(class)中,我学习了如何使用 FIT 进行自动验收测试。在我看来,FIT 似乎快要死了,我不再确定它是否是我想要用于作业的技术。无论如何...
我有遗留系统要测试,一切都设计/编码不当。当然没有测试,而且我不允许在编写任何验收测试之前重构或更改功能。
为简单起见,假设该系统是一个商店收据系统,它将产品 list (含价格)和总成本打印到标准输出流。像这样:
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 编写验收测试。在正常情况下,我会做类似的事情:
购物 list (输入):
-------------------
| 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
,尝试模拟它或为其编写代理类会出现以下错误:
Cannot subclass final class class SomeThirdPartyClass
此外,它是不可变的,公共(public)构造函数没有参数。看来老师是故意的....