我是性能的真正爱好者,但我也意识到执行自动化测试的重要性(直到更好的形式验证方法成为主流)。
缺点是当您尝试设计可测试性时,您开始引入接口来表示您的依赖关系。如您所知,接口使您的调用在该依赖项上动态分派,并减少了编译时的优化机会。
class MyDependency
{
void someMethod();
}
class MyUnit
{
// Concrete type reference of MyDependency allows
// to bypass the dynamic dispatch
this(MyDependency mayBeAMock)
{
mayBeAMock.someMethod();
}
unittest
{
// Now how can I get a mock of my dependency without to instantiate it.
auto dep = someBlackMagic.getMock();
auto uut = new MyUnit(dep);
}
}
确实存在一种更好的方法来单元测试类,而无需在生产中采用动态调度成本。如果需要,我可以负担单元测试执行的成本,但不能负担生产版本的成本。
我对 D 和 C++ 解决方案感兴趣。