jpo*_*poh 8 unit-testing overloading
所以我有一个看起来如下的类:
public class MyClass
{
DatabaseDependency _depend;
public MyClass(DatabaseDependency depend)
{
_depend = depend;
}
public string DoSomething(DBParameter database)
{
var result = _depend.GetResults(database, ...);
string response = String.Empty;
// some logic to process the result
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
其中DBParameter是一个简单的值类,包含Server,DBName,DBType等属性.
现在,我想为DoSomething添加一个重载,以便它接受连接字符串而不是DBParameter参数(假设DatabaseDependency已经有一个接受连接字符串的GetResults重载).
我的问题:我有几个单元测试,描述了用于处理DatabaseDependency.GetResults结果的各种逻辑路径.当我向DoSomething添加重载时,我本质上会重构代码,以便这两个重载都可以重用这个逻辑(即可能将它移动到私有方法).进行单元测试的正确方法是什么?我是否需要进行尽可能多的单元测试来验证我添加的新重载的所有逻辑路径?
如果您的代码保持当前的样式,那么是:您还需要对该方法进行单元测试,基本上重复您的测试工作.
但是,如果实现功能以便一个方法只调用另一个方法是有意义的,那么可以将其他方法设置为虚拟方法.这将允许您创建一个特定于测试的子类,您只需验证其他方法使用正确的值调用虚方法.
一旦通过一个或多个单元测试验证,您就不需要再进一步测试该方法,因为现在您已经证明该方法正确调用了另一种方法,并且您可以将测试工作集中在该方法上.
如果您确信使用字符串的重载方法只是转换为连接对象然后委托给原始对象,则应该再添加一个测试方法.
但是,如果重构底层重载方法,则不会发生委派,这会中断.在这种情况下,我会更有信心复制这两种方法的所有测试.
我认为第一条路线是最务实的.但是,偶尔运行代码覆盖率分析是个好主意,这将在以后指示是否需要更多测试.