![]() |
1
8
拥有许多模拟对象表明: 1) 你有太多的依赖关系。 重新审视你的代码,并尝试进一步分解它。特别是,尝试将数据转换和处理分开。 因为我对你所处的环境没有经验。因此,让我以自己的经验为例。
如果您想测试这个方法,您必须最终为In和Out创建mock,这可能需要它们后面相当复杂的类来支持。 但如果仔细观察,从aIn读取和向aOut写入可以与处理它分开。因此,您可以创建另一个类,该类将接受读取输入并返回输出对象。
您以前的方法是:
通过这种方式,您可以在不需要模拟的情况下测试处理。你可以去:
因为处理现在独立于输入、输出甚至套接字。 2) 您已经完成了一个接一个的单元测试—应该进行集成测试的内容。 有些测试不用于单元测试(从某种意义上说,它需要不必要的更多努力,并且可能无法有效地获得一个好的指标)。此类测试的示例包括涉及并发性和用户界面的测试。它们需要不同于单元测试的测试方法。 我的建议是进一步分解它们(类似于上面的技术),直到其中一些适合单元测试。所以你有一些很难测试的部件。 编辑
软件组件或子组件以某种方式相互关联,如字符组合成单词、单词组合成句子、句子组合成段落、段落组合成小节、小节、章节等。
从这个角度来看,大多数情况下,段落与其他段落的关联程度不如句子与其他句子的关联程度(或依赖于其他句子)。小节、小节甚至更加松散,而单词和字符则更加依赖(因为语法规则已经生效)。
如果是这种情况,您的解决方案是平衡测试。如果一个部件由多个部件所依赖,并且需要一组复杂的模拟对象(或者需要更简单的工作来测试它)。也许你不需要测试它。例如,如果A使用B,C使用B,那么B很难测试。那你为什么不测试A+B作为一个,C+B作为另一个呢。在我的例子中,如果SocketProcessor很难测试,太难了以至于你会花更多的时间来测试和维护测试,而不是开发它,那么这是不值得的,我将立即测试所有东西。 如果没有看到你的代码(事实上,我从来没有开发过cocotouch),那就很难说了。我可能会在这里提供很好的评论。对不起,D。
希望这有帮助。 |
![]() |
2
0
我的解决方案(不是CocoaTouch)是继续模拟对象,而是将模拟重构为一种通用的测试方法。这降低了测试本身的复杂性,同时保留了模拟基础结构,以单独测试我的类。 |
![]() |
3
0
Should one test internal implementation, or only test public behaviour? 我要寻找的是使用TDD的最佳实践。
然后,它继续规定:
我做了其中的第一个,即“非常短的开发周期”,不同之处在于我在编写之后进行了测试。 我之所以在编写之后进行测试,是因为我根本不需要“编写”任何测试,即使是集成测试。 我的周期是这样的:
我认为这给了我TDD的好处:
我避免了一些成本/缺点:
|
![]() |
4
0
为了摆脱过度的嘲弄,你可以按照 Test Pyramid
有了这种心态,你几乎消除了所有的嘲弄。 |
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 2 年前 |
![]() |
shilin agre · 在Python中测试修饰函数 2 年前 |
![]() |
SlipScout · Unittest只传递单个值,而不是获取多个值 2 年前 |
![]() |
Alex · 从实际对象的实例返回默认模拟结果 2 年前 |