我正在处理OO设计问题。我会尽力专注于我感到困惑的部分,并用文本解释它,而不是提供代码。作为参数传递给类的关联对可测试性有什么影响?
我有一个名为SalesPolicy的类,它包含一个TaxPolicy列表。 TaxPolicy是一个抽象类,它表示名称和税率作为属性的税收政策。 TaxPolicy包含一个名为accept的抽象方法。 TaxPolicy的具体实现必须实现accept方法并提供决定何时适用TaxPolicy的逻辑。
我有另一个名为SalesEngine的类。 SalesEngine具有SalesPolicy,SalesPolicy是SalesEngine构造函数的参数之一。 SalesEngine通过调用accept方法决定SalesPolicy中的TaxPolicy列表中的TaxPolicy是否适用于某个项目,然后相应地计算税额。如前所述,SalesPolicy包含一个属性,它是一个TaxPolicy列表和一个添加到列表的方法。
我需要知道的是,是否可以为SalesEngine类使用类似SalesPolicy的参数。从可测试代码的角度来看,这会产生什么影响?
谢谢你将文本翻译成代码。那对可测试性的影响呢?测试SalesEngine类的测试用例将被迫首先创建SalesPolicy。这间接意味着测试用例必须创建至少一个TaxPolicy才能添加到SalesPolicy! – CKing 2012-08-04 13:33:44
我认为你上面描述的是两个单独的测试用例。其中一个没有创建SalesPolicy,在这种情况下,accept()方法可能什么也不做,另一个方法是必须在SalesEngine之前创建一个SalesPolicy。这些听起来都很正常;这就是JUnit中'@ Before'标签的用途,它们允许您为测试初始化场景。 – 2012-08-04 13:46:48
SalesEngine不包含接受方法。 SalesEngine遍历SalesPolicy持有的List中的TaxPolicy对象。然后,它将每个购买的商品逐个传递给每个TaxPolicy中的accept方法,并根据TaxPolicy计算商品的税额。我们基本上在考虑2个级别的迭代,对于每个项目 - >对于每个策略 - >如果应用策略 - >计算税收 –
CKing
2012-08-04 13:52:07