除非代码被设置为要测试,否则您不能测试代码是否被普遍接受?
一段假设的代码:
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
接口(interface)和工厂。这不影响我的问题。
更改上述代码的问题是代码已更改。代码在客户未要求更改的情况下已更改。任何变化都需要召开 session 和电话 session 。所以我正处于不测试任何东西更容易的地步。
如果我不愿意/不能进行更改:这是否会使我无法执行测试?
注意:上面的伪代码可能看起来像 C#,但这只是为了它的可读性。问题与语言无关。
注意:假设的代码片段、问题、需要重构、重构都是假设的。如果您对我的想法不满,您可以插入您自己的假设代码示例。
注意:以上假设代码是假设的。与任何代码的任何关系,无论是活的还是死的,纯属巧合。
注意:代码是假设的,但任何答案都不是。这个问题不是主观的:因为我相信有答案。
更新: 这里的问题当然是我不能保证上面示例中的更改不会破坏任何东西。当然,我将一段代码重构为一个单独的方法,并且代码在逻辑上是相同的。
但我不能保证添加新的 protected 方法不会偏移对象的虚拟方法表,如果此类在 DLL 中,那么我刚刚引入了访问冲突。
最佳答案
答案是肯定的,需要更改一些代码以使其可测试。
但可能有很多代码无需更改即可进行测试。我会先专注于为这些东西编写测试,然后在其他客户需求让您有机会以可测试的方式重构它时为其余部分编写测试。
关于unit-testing - 可以在不更改任何代码的情况下对最初未设计的单元测试代码进行测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033813/