【问题标题】:Unit test on simple method which only calls other method对仅调用其他方法的简单方法进行单元测试
【发布时间】:2015-10-25 08:53:32
【问题描述】:

如果公共方法只调用外部方法,内部不包含特殊逻辑,是否应该在其上添加单元测试?

下面的方法只调用外部方法,使用返回值构造一个学生对象。

public student GetStudent(int ID){
    var n = GetName(ID);
    var a = GetAddress(ID);
    return new student{
        name  = n;
        address = a;
    }
}

如果我已经对 GetName() 和 GetAddress() 方法进行了单独的单元测试,我还需要对 GetStudent() 方法进行单元测试吗?

由于测试已经确保 GetName() 和 GetAddress() 将返回有效结果(例如,不为空),因此 GetStudent() 应该相应地没问题。

我发现决定是否应该对方法进行测试是相当困难的。您能否在这方面也推荐一些外部资源(例如网站、书籍、博客)?

谢谢。

【问题讨论】:

  • 理想情况下,是的。测试是面向未来的代码,而不是按原样测试。如果GetStudent 更改其逻辑以由另一个开发人员返回name = n.ToLower(),从而破坏多个东西怎么办?
  • 除了@Rob 的回答——如果您使用student 类公开学生数据,您是否需要公开GetNameGetAddress

标签: c# unit-testing testcase test-coverage


【解决方案1】:

您需要在测试中指定 GetStudent 行为。例如,在虚幻 id 的情况下会发生什么? exeption/null 这应该在测试中描述。您需要检查最终对象:can/cant name 为 null,can/cant address 为 null。这将是 GetStudent 函数的好文档

【讨论】:

    【解决方案2】:

    答案是“主要基于意见”,但通常,您可以测试此方法并检查:

    1. 方法不返回null
    2. student 类的所有字段均已设置
    3. 您应该模拟 GetNameGetAddress 方法并检查它们是否都以正确的参数调用

    所以,这个例子很简单,是的。但是,也许将来,您在此方法中会有一些逻辑,您需要确保一切正常。

    【讨论】:

      【解决方案3】:

      我的理念是始终对公开的方法进行单元测试,无论它们多么微不足道。原因是如果其他人将要编写此代码,并且他们决定要更改某些内容,则没有质量保证可以保证他们的新代码会破坏系统,除非您有单元测试。单元测试是为了确保代码质量好,并确保其他开发人员不会固有地破坏系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多