我还处于关于单元测试的学习阶段,特别是关于模拟(我正在使用PascalMock和DUnit框架).我现在偶然发现的一件事是,我找不到将测试类/接口的硬编码实现细节硬编码到我的单元测试中的方法,这只是感觉不对...
例如:我想测试一个实现非常简单的接口的类,用于读取和编写应用程序设置(基本上是名称/值对).呈现给消费者的界面完全不知道实际存储值的位置和方式(例如,注册表,INI文件,XML,数据库等).当然,访问层是由一个不同的类实现的,该类在构造时被注入到测试类中.我为这个访问层创建了一个模拟对象,现在我可以完全测试接口实现类,而无需实际读取或写入任何注册表/ INI文件/任何内容.
但是,为了确保模拟行为与被测试类访问时的真实行为完全相同,我的单元测试必须通过非常明确地定义预期的方法调用和测试类所期望的返回值来设置模拟对象.这意味着如果我必须更改访问层的接口或测试类使用该层的方式,我还必须更改内部使用该接口的类的单元测试,即使接口我实际上测试的类没有改变.这是我在使用模拟时必须要使用的东西,还是有更好的方法来设计避免这种情况的类依赖性?