重构参数和单元测试

时间:2008-12-20 16:48:26

标签: c# unit-testing parameters

我有这个方法:

public bool CanExecute()

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

public bool CanExecute(IStation target)

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:9)

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

或者,如果参数具有合理的默认值(再次,如null!),resharper可以非常容易地处理这样的更改。要添加新参数,请右键单击函数名称并选择更改签名...从此处可以添加具有合理默认值的新参数。 RS将更新所有通话,因此您不必!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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