在 class 而不是接口中创建 public 方法

Creating public methods in class and not in interface

我遇到了一个问题,在 class

中创建 public methods/properties 是否是个好主意
public class MyClass : IMyClass

但不在界面中

public interface IMyClass

主要是为了对 IMyClassMyClass 中实现的方法进行单元测试。我想从我的单元测试中访问 class MyClass 中的实现细节,以检查某些字段是否符合预期。另外,我不想通过我的界面公开这些细节。

另一方面,我觉得 MyClass 中的所有 public 都应该暴露在接口 IMyClass 中,因为这是访问修饰符的情况: public 公开信息,private 隐藏细节。

所以,我的问题是:在 class MyClass 中创建 public methods/properties 是否好,但在界面 IMyClass 中却不行?

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

编写了解您的代码如何工作的测试会将您的测试与您的代码结合起来,这会使测试变得脆弱 - 对代码的每次更改都会破坏测试。

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

如果您的 API 没有查询机制,也许测试试图告诉您代码中缺少这样的功能。