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

Creating public methods in class and not in interface

提问人:DominikS 提问时间:11/12/2018 更新时间:11/12/2018 访问量:69

问:

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

public class MyClass : IMyClass

但不在界面中

public interface IMyClass

主要是为了单元测试的目的,从内部实现的方法。我希望能够从我的单元测试访问类内的实现细节,以检查某些字段是否符合预期。此外,我不想通过我的界面暴露这些细节。IMyClassMyClassMyClass

另一方面,我有一种感觉,里面的所有公共内容都应该在界面中公开,因为访问修饰符就是这种情况:公开信息,隐藏细节。MyClassIMyClasspublicprivate

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

单元测试 oop 与语言无关 的访问修饰符

评论


答:

1赞 Kraylog 11/12/2018 #1

测试应该是代码的客户端,通过其接口使用代码。

编写一个知道你的代码是如何工作的测试将你的测试与你的代码耦合在一起,这使得测试变得脆弱——对代码的每一次更改都会破坏测试。

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

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