【发布时间】:2010-09-27 19:27:58
【问题描述】:
快速设计问题。
ClassA 有一个名为 DoSomething(args) 的方法
在DoSomething()中,在它真正能做某事之前,它需要对args做一些准备工作。我认为这应该封装在 ClassA 中(而不是在外面做准备工作并将其传入),因为没有其他东西需要知道 DoSomething 需要这个准备工作。
然而,让我思考的是实际的准备工作代码所属的地方。
在我的特定示例中,准备工作是从 args 创建满足特定条件的项目列表。
我的预感是我应该创建一个新类 ListOfStuff,它在其构造函数中接受 args 并将这个准备工作放在这里。
从 TDD 的角度来看,我认为这是正确的选择。然后我们可以对 ListOfStuff 进行单元测试,直到我们心满意足。如果我们把准备工作放在 ClassA 的私有方法中,我们只能通过测试 DoSomething() 来间接测试它。
但这是矫枉过正吗?自从采用 TDD 和 DI 方法以来,我已经看到我编写的类的数量成倍增加 - 我应该担心吗?
Ta。
【问题讨论】:
-
对于单元测试,使用 InternalsVisibleTo 属性。这是一个非常有用的属性。它允许“朋友”程序集查看另一个程序集的内部方法/属性/成员。
-
示例:使用系统;使用 System.Runtime.CompilerServices; [assembly:InternalsVisibleTo("ByBox.BusinessLogic.UnitTests")] 命名空间 ByBox.BusinessLogic { ....
标签: unit-testing language-agnostic tdd mocking