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

Unit testing 在类中而不是在接口中创建公共方法,unit-testing,oop,language-agnostic,access-modifiers,Unit Testing,Oop,Language Agnostic,Access Modifiers,我遇到了一个问题,在类中创建公共方法/属性是否是一个好主意 public class MyClass : IMyClass 但不是在界面中 public interface IMyClass 主要是为了单元测试的目的,从MyClass内部的IMyClass实现方法。我希望能够从单元测试访问类MyClass中的实现细节,以检查某些字段是否符合预期。另外,我不想通过我的界面公开这些细节 另一方面,我觉得MyClass中的所有公共内容都应该在接口IMyClass中公开,因为这是访问修饰符的情况:

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

public class MyClass : IMyClass
但不是在界面中

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

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


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

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

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

相反,尝试只使用API来练习代码。因为听起来类中有状态,所以测试代码需要在另一个API调用中查询该状态

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