在类而不是在接口中创建公共方法

时间:2018-11-12 11:13:33

标签: unit-testing oop language-agnostic access-modifiers

我遇到了一个问题,在类内创建公共方法/属性是否是个好主意

public class MyClass : IMyClass

但不在界面中

public interface IMyClass

主要用于对IMyClass内部MyClass中实现的方法进行单元测试的目的。我想从单元测试中访问类MyClass中的实现详细信息,以检查某些字段是否符合期望。另外,我不想通过我的界面公开这些细节。

另一方面,我认为MyClass内部的所有公共内容都应在接口IMyClass中公开,因为访问修饰符就是这种情况:  public隐藏信息,private隐藏细节。

所以,我的问题是:在类MyClass内而不在接口IMyClass内创建公共方法/属性好吗?

1 个答案:

答案 0 :(得分:1)

一个测试应该是您代码的客户端,可以通过其界面使用您的代码。

编写知道代码工作方式的测试会将您的测试与代码耦合在一起,这会使测试变得脆弱-对代码的每次更改都会破坏测试。

相反,请尝试仅使用API​​来执行代码。由于听起来您的类中有状态,因此您的测试代码将需要在另一个API调用中查询该状态。

如果您的API没有查询机制,则可能是测试试图告诉您代码中缺少此功能。