Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何对重载函数进行单元测试?_Unit Testing_Overloading - Fatal编程技术网

Unit testing 如何对重载函数进行单元测试?

Unit testing 如何对重载函数进行单元测试?,unit-testing,overloading,Unit Testing,Overloading,因此,我有一个类,看起来像以下内容: public class MyClass { DatabaseDependency _depend; public MyClass(DatabaseDependency depend) { _depend = depend; } public string DoSomething(DBParameter database) { var result = _depend.Ge

因此,我有一个类,看起来像以下内容:

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;
    }

}
其中DBParameter是一个简单的值类,它包含服务器、DBName、DBType等属性

现在,我想向DoSomething添加一个重载,以便它接受连接字符串而不是DBParameter参数(假设DatabaseDependency已经有一个接受连接字符串的GetResults重载)


我的问题:我有几个单元测试,它们描述了用于处理DatabaseDependency.GetResults结果的各种逻辑路径。当我将重载添加到DoSomething中时,我基本上会重构代码,以便这两个重载都重用该逻辑(即,可能将其移动到私有方法)。进行单元测试的正确方法是什么?我是否需要同样多的单元测试来验证我正在添加的新重载的所有逻辑路径?

如果您确信使用字符串的重载方法只会转换为连接对象,然后委托给原始对象,那么您应该再添加一个测试方法

但是,如果重构底层重载方法,使其不发生委托,则会出现这种情况。在这个场景中,我会更加自信地复制这两种方法的所有测试


我认为第一条路线是最务实的。不过,偶尔运行一次代码覆盖率分析是一个好主意,这将在以后指出是否需要更多的测试。

是的,将公共处理重构为私有方法-我假设不管测试考虑如何,您都会这样做,重复的代码是不好的。有趣的是,思考测试如何引导我们做正确的事情


然后,对于每个重叠的启动路径,您有两个简单的测试。

如果您的代码保持当前的外观,那么是:您还需要对该方法进行单元测试,基本上重复您的测试工作

但是,如果实现功能使一个方法简单地调用另一个方法是有意义的,那么可以将另一个方法设置为虚拟的。这将允许您创建一个特定于测试的子类,在该子类中,您只需验证虚拟方法是否由具有正确值的另一个方法调用


一旦通过一个或多个单元测试验证,就不需要进一步测试该方法,因为现在已经证明该方法正确调用了另一个方法,您可以将您的测试工作集中在该方法上。

取决于您是在进行黑盒测试还是白盒测试,以及您的应用程序是否同时使用该方法的两个版本

如果您假设您只是在测试实现,那么简单地测试“主”版本就可以了。如果您按照一个只知道所呈现的API(javadocs或类似的API)的测试编写者的思路思考,那么您需要只基于API进行测试,这意味着完全测试这两种方法

如果您的应用程序只使用一种方法,则弃用另一种方法,并创建一个版本条件测试,当弃用的方法仍然存在于某个预先确定的版本时,该测试将失败。IE:强制在某个时候删除不推荐的方法