在了解了在代码库中进行自动化测试的重要性之后,我正在尝试将单元测试添加到我自己相当大的C ++代码库中。
我正在处理的代码库是一个共享库。我想我理解如何处理我需要进行的大量系统调用;在接口后面隐藏很多它们并使用依赖注入。问题是,我不希望使用库的客户端代码看到依赖注入,因为这只是使库代码单元可测试的要求。
例如,请使用以下代码行:
TextBox* textBox = new TextBox();
TextBox
类包含多次调用Win32 API函数的代码,例如剪贴板。如果我理解正确,我需要这样做才能对TextBox
类进行适当的单元测试:
TextBox* textbox = new TextBox(IClipboardApi* clipboard);
问题是,如果有人使用这个库,我认为他们不应该提供真正的剪贴板实例。我可以利用默认值:
TextBox* textbox = new TextBox(IClipobardApi* clipboard = CreateClipboardInstance());
但我不知道这是不是正确的方法。
我对单元测试仍然很陌生,我的大部分库代码都是在我学习单元测试之前编写的。完全有可能这个课程写得不好。如果课程编写得很好,我怎么能从客户端隐藏这样的实现细节呢?如果课程写得不好,可能是更好的设计?