【发布时间】:2012-09-06 15:45:19
【问题描述】:
例子:
public interface IFoo
{
bool DoSomething();
}
public class Foo:IFoo
{
public bool DoSomething()
{
var result = DoOtherThing();
...
return result;
}
public bool DoOtherThing()
{
...
}
}
我通常的 TDD 方法是在 DoSomething() 和 DoOtherThing() 方法上编写单元测试。但如果DoOtherThing 是私有方法,这将很难做到。我还读到测试私有方法是不行的。
即使类的目的只是通过其 (IFoo) 接口访问,在类上具有公共方法以促进代码覆盖和测试是否被认为是可以接受的?通常我会将接口范围之外的方法作为私有方法,但这不允许您有效地测试所有代码。公开方法允许您对Foo 类进行正确的测试,但至少对我来说,拥有不从类外部调用的公共方法似乎不正确。这种方式被认为最适合 TDD 还是有更好的方式?
【问题讨论】:
-
如果您有从未被公共方法(直接或间接)调用的私有方法,为什么不直接删除该代码?
-
不,我说的是我以前编写代码的方式,所有不是在接口上定义的方法的东西,我都将其作为私有方法。但是当你试图让每个方法都有一个单一的职责时,你最终会在这些私有方法中得到大部分代码。根据定义,它们不是公共接口的一部分,据我所知,没有必要进行测试。
-
@dbt 评论的附录:通过调用它们的面向公众的方法测试您的私有代码。
-
@dbt 评论的另一个角度:我看到很多人问如何覆盖私人成员。如果无法“使用”定义它们的类以便访问它们,那么它们的目的是什么? 应编写测试以使用您的类,因为它们真正已被使用。
标签: c# unit-testing testing tdd