使用 C#
我知道之前有人问过这个问题,很多人会回答不,只测试公共(public)方法,而不是实现细节。其他人会说是,如果它有一些重要的逻辑。尽管您随后可能会考虑将其拆分为自己的类。
我还没有看到解决的一个问题是必须重复测试在继承类中调用 protected 方法的公共(public)方法。 如果我在基类中测试 protected 方法,当然我不必在基类中重新测试它。或者我应该将测试复制并粘贴到多个类(class)吗?
最佳答案
您绝对应该测试 protected 方法。从测试的角度来看,“ protected ”方法仍然是公共(public)接口(interface)的一部分,即使“公共(public)”仅限于从您的类派生的那些类。因为不受您控制的代码可以引用这些方法,所以您必须确保它们按定义运行。
至于重复测试,我没有确定的答案。如果给出:
public class A
{
protected virtual void Foo() {}
}
public class B:A
{
}
问题是您是否为 B.Foo
编写了测试。一方面我会说不,因为 B
没有提供 Foo
的显式实现,所以它的行为不可能与 的行为不同>A.Foo
,我们可以假设您已经测试过 A.Foo
。
另一方面,A.Foo
可能依赖于 B
可以修改的其他一些 protected
字段或属性,或者依赖于私有(private)的B
在构造函数或初始化函数中提供的回调。在这种情况下,您绝对必须测试 B.Foo
,因为它的行为可能与 A.Foo
不同,即使 B
不会覆盖 A.Foo
。
显然,如果 B
覆盖了 Foo
,那么您必须为 B.Foo
编写测试。但是,如果 B
没有覆盖 A.Foo
,那么您必须使用您的判断。
总而言之,这与必须为派生自另一个类的任何类编写测试并没有什么不同。考虑从 TextWriter 派生一个类.您会为 TextWriter
类定义的所有虚函数编写显式单元测试吗?或者您是否只为您重写的那些方法以及那些功能可能因副作用而改变的方法编写测试?
关于c# - protected 方法应该进行单元测试吗?如何避免重复测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528348/