我有这个方法:
public bool CanExecute()
在70次提交后,我添加了一个额外的参数
public bool CanExecute(IStation target)
现在的问题是我有7个单元测试,涵盖了测试各种空值/属性组合的CanExecute方法。
添加此简单参数需要修复这7个单元测试。修复很简单但是......
是否有最佳做法和/或模式来避免更新单元测试所需的这种手工重构?
假设我知道在不久的将来可能会添加一个额外的参数,我如何对单元测试进行编码以解决这个问题?它只是矫枉过正还是有成语/模式/可以遵循的东西?
编辑:我不能简单地添加重载,因为IStation依赖项不是可选的。我正在修复一个错误,其中IStation实例是预期的,但没有一个可用,所以必须通过CanExecute提供...你看。
重构工具似乎是要走的路。谢谢!
答案 0 :(得分:9)
你能不在代码中保留这两种方法吗?除非IStation参数必须为非null,否则您可以在不更改任何现有代码的情况下使用它。
或者,如果参数具有合理的默认值(再次,如null!),resharper可以非常容易地处理这样的更改。要添加新参数,请右键单击函数名称并选择更改签名...从此处可以添加具有合理默认值的新参数。 RS将更新所有通话,因此您不必!
答案 1 :(得分:1)
您当然需要考虑是否在单元测试中复制了太多功能,但情况可能并非总是如此。
相当多的现代IDE(C#的resharper)支持“更改方法”重构,允许您为新参数提供默认值。我发现这种重构功能对主人来说真的很有价值。
答案 2 :(得分:1)
如果您知道该方法可能会再次发生变化,我认为明智的做法是重载方法并为重载成员添加添加单元测试,而不是更改旧的单元测试。如果星星对齐你,你甚至可能会发现重载的方法调用了原始的无参数方法,所以你只需要为新参数编写测试,而不是重复原来的七个测试。
答案 3 :(得分:0)
我会保留两者。重载方法并为新的重载方法添加单元测试,以涵盖刚刚添加的内容。