除非设置要测试的代码,否则您不能测试代码是否被普遍接受?
一段假设的代码:
public void QueueOrder(SalesOrder order)
{
if (order.Date < DateTime.Now-20)
throw new Exception("Order is too old to be processed");
...
}
有些人会考虑将其重构为:
protected DateTime MinOrderAge;
{
return DateTime.Now-20;
}
public void QueueOrder(SalesOrder order)
{
if (order.Date < MinOrderAge)
throw new Exception("Order is too old to be processed");
...
}
注意:你可以想出更复杂的解决方案;涉及IClock
接口和工厂。它不影响我的问题。
更改上述代码的问题是代码已更改。代码已更改,而客户并未要求更改。任何改变都需要召开会议和电话会议。所以我处于不测试任何东西更容易的地步。
如果我不愿意/不能做出改变:这会让我无法进行测试吗?
注意:上面的伪代码可能看起来像 C#,但这只是为了它的可读性。问题与语言无关。
注意:假设的代码片段、问题、重构需求和重构是假设的。如果您对我的不满意,您可以插入自己的假设代码示例。
注意:以上假设代码是假设的。与任何代码的任何关系,无论是活的还是死的,纯属巧合。
注意:代码是假设的,但任何答案都不是。这个问题不是主观的:因为我相信有一个答案。
更新:当然,这里的问题是我不能保证上面示例中的更改不会破坏任何东西。当然,我将一段代码重构为一个单独的方法,并且代码在逻辑上是相同的。
但我不能保证添加新的受保护方法不会偏移对象的虚拟方法表,如果这个类在 DLL 中,那么我刚刚引入了访问冲突。