|
|
1
2
你能把你正在做的事情分成两部分吗,一部分是抽象协议,另一部分是对套接字的绑定?然后您可以更容易地测试抽象协议,并将测试绑定的重点放在它是否正确调用任何连接的抽象协议的方法/操作上。
|
|
|
2
7
我假设您需要SieveClient在内部控制其他对象的实例化,因为它是您不想公开的API的一部分。如果这就是原因,把它们分开,你就不再有同样的需要,因为你可以有 . 通过以上操作,您可以 将模拟对象交给协议实现 这些嘲弄会有你可能需要的任何期望 . 如果您发现它最终会导致它过于复杂,那么您可能需要重新调整职责,这通常会导致更干净/更简单的协议实现(如果您发现您需要从执行这些单元测试中得到帮助)。 上面说,你也需要 考虑一下您要测试的代码是否尽可能集中在协议上,并且没有任何额外的元素。如果是这样的话,那么单元测试就不是一个好的选择,因为它唯一的责任就是与外部系统的交互。我会决定协议规范在这个系统中有多重要,如果它完全是关于与外部系统的集成,我会把它当作一个集中的集成测试,而不是攻击真正的外部系统,并与单元测试分开 由于编辑的原因,我重新阅读了这个问题之后,我不得不强调我所说的话 集中集成测试 上面。你问:
这并不意味着所有代码的单元测试,都会涉及到外部系统,只是使用该对象的非常简单的代码/类单元 在您的场景中,这样的对象很可能是SieveClient,在这种情况下,请忘记对这段代码的单元测试。您想做的是在测试使用它的代码时模拟SieveClient。另一方面,如果您发现SieveClient远不止这些,那么您需要添加一个类来简化这些通信方面,这就是您在测试SieveClient时所模拟的,也是您针对其进行集中集成测试的对象。 这种类型的测试是确保与外部交互的代码按预期工作的非常有效的方法,因为这是类和相关测试的重点。 如果外部系统上的某些东西开始以不同的方式工作,您会清楚地注意到它,而不是将它与您的应用程序逻辑混合,或者根本不进行测试。 |
|
|
3
2
让
implement or re-use a mock server
. 不要嘲笑这些血淋淋的插座细节
最后,对于难以测试的代码设计得很糟糕这一说法,我有着复杂的感受。视情况而定。您应该设计您的代码,使其易于使用(在调用方代码中)和修改。单元测试只是达到这些目的的一种手段:它们是您将要编写的第一个调用程序代码,它们让您确信在进行更改时不会出错。不要让特定的框架或方法
twist and maim your design
write brittle tests
就像“我期望方法”
|
|
|
wavesinaroom · 断言结构向量长度 1 年前 |
|
|
Tim Kirkwood · 比较空数据帧 1 年前 |
|
Kamran Khan · 使用单元测试ASP。NET核心 2 年前 |
|
|
paymer · 为什么我的代码没有删除我的单元测试生成的zip文件? 2 年前 |
|
|
Ricky Mo · 角度测试如何模拟导入的const 2 年前 |
|
|
Natty · Visual Studio中缺少“代码覆盖率结果” 2 年前 |