2

我有这个方法:

public bool CanExecute()

在 70 次提交之后,我添加了一个额外的参数

public bool CanExecute(IStation target)

现在的问题是我有 7 个单元测试,涵盖了测试各种空值/属性组合的 CanExecute 方法。

添加这个简单的参数需要修复这 7 个单元测试。修复很简单,但是...

是否有最佳实践和/或模式来避免更新单元测试所需的这种手动重构?

假设我知道在不久的将来可能会添加一个额外的参数,我如何编写单元测试代码来解决这个问题?它只是矫枉过正还是有成语/模式/要遵循的东西?

编辑:我不能简单地添加重载,因为 IStation 依赖项不是可选的。我正在修复一个错误,其中需要一个 IStation 实例,但没有一个可用,所以它必须通过 CanExecute 提供......你看。

重构工具似乎是要走的路。谢谢!

4

4 回答 4

9

你不能在代码中保留这两种方法吗?除非 IStation 参数必须为非 null,否则您可以在不更改任何现有代码的情况下摆脱它。

或者,如果参数有一个合理的默认值(同样,像 null!),resharper 可以很容易地处理这样的变化。要添加新参数,请右键单击函数名称并选择更改签名... 从这里您可以添加具有合理默认值的新参数。RS 将更新所有呼叫,因此您不必这样做!

于 2008-12-20T17:06:38.360 回答
1

您当然需要考虑是否在单元测试中复制了太多功能,但情况可能并非总是如此。

相当多的现代 IDE(C# 的 resharper)支持“更改方法”重构,它允许您为新参数提供默认值。我发现掌握这种重构功能真的很值得。

于 2008-12-20T17:08:44.737 回答
1

如果您知道该方法可能会再次更改,我认为明智的做法是重载该方法并为重载的成员添加单元测试,而不是更改旧的单元测试。如果星星为您对齐,您甚至可能会发现重载的方法调用了原始的无参数方法,因此您只需为新参数编写测试,而无需重复原始的七个测试。

于 2008-12-20T17:30:58.810 回答
0

我会保留两者。重载该方法并为新的重载方法添加单元测试,以涵盖您刚刚添加的内容。

于 2008-12-20T19:34:53.240 回答