unit-testing - 单独的类与方法

标签 unit-testing language-agnostic tdd mocking

快速设计问题。

ClassA 有一个名为 DoSomething(args) 的方法

在 DoSomething() 中,在它真正可以做某事之前,它需要对 args 做一些准备工作。我认为这应该封装在 ClassA 中(而不是在外面做准备工作并将其传递进去),因为没有其他东西需要知道 DoSomething 需要这个准备工作。

然而,让我思考的是实际的准备工作代码所属的地方。

在我的特定示例中,准备工作是从 args 创建满足特定条件的项目列表。

我的预感是我应该创建一个新类 ListOfStuff,它在其构造函数中接受 args 并将这个准备工作放在这里。

从 TDD 的角度来看,我认为这是正确的选择。然后我们可以对 ListOfStuff 进行单元测试,直到我们心满意足为止。如果我们把准备工作放在 ClassA 的私有(private)方法中,我们只能通过测试 DoSomething() 来间接测试它。

但这是否矫枉过正?自从采用 TDD 和 DI 方法以来,我已经看到我编写的类的数量成倍增加——我应该担心吗?

塔。

最佳答案

这里有一些启发式方法。

  • 这个类(class)有没有说明
    从调用到
    调用?这项准备工作是否得到
    每次你需要做
    doSomething(),或者它完成了吗?
    得救了吗?如果是这样,那就证明了
    类(class)。
  • 是否需要进行此计算
    在不止一次的地方?如果是这样的话,
    争论一个类(class)。
  • 能不能详细点
    doSomething() 的实现
    方法,或准备工作
    它,改变而不影响
    封闭类?如果是这样,那争论
    上课。

  • 好吧,三个启发式。没有人期望西类牙宗教裁判所。

    关于unit-testing - 单独的类与方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/382602/

    相关文章:

    检测和比较短语的算法

    php - 如何对执行命令行程序的 PHP 类方法进行单元测试?

    language-agnostic - 点与线段之间的最短距离

    c# - ASP.Net 中的单元测试 ProfileBase

    performance - 快速生成 "triangle sequence": avoiding mispredictions

    visual-studio-2008 - 如何使用 MSTest/VS2008 简化 TDD

    c# - 真实项目依赖注入(inject)的 F# 模拟

    python - 使用测试驱动开发对 Web API 进行编程

    unit-testing - 作为专业开发人员不编写单元测试是否可以接受?

    android - 访问测试应用程序 Assets