1
|
Ignacio Soler Garcia · 技术社区 · 11 年前 |
![]() |
1
5
不,请不要这样写测试用例。单元测试不是“只测试一件事”,而是确保每个测试都是一个单元,即它不会影响任何其他测试。
您的所有测试都应该对类的公共API感兴趣。不要测试内部或私有方法,它们是类内部工作的一部分,也不要为了测试其他部分而试图模拟类的部分。你的测试
对于任何有兴趣就如何编写好的单元测试进行精彩演讲的人,我建议留出一个小时的时间观看 'Ian Cooper: TDD, where did it all go wrong' video 来自NDC 2013。 |
|
2
3
根据你让我们想象的例子,你的问题的简单答案是你的方法不正确。通过遇到您正在经历的问题,代码试图告诉您,您在代码中有一些混合的问题,这些问题耦合得太紧密了,而且您使用的不是内聚代码,而是粘合代码。(Glenn Vanderburg在 http://www.vanderburg.org/Blog/Software/Development/cohesion.rdoc )
如果你觉得有必要模仿
困难告诉你的第一件事是
第二件突出的事情是,您在测试时遇到了困难
您的示例可能会告诉您的第三件事是对前一个问题的改进,指出您不仅依赖于无法控制的可变状态,而且依赖于不确定的可变状态。即使向对象发送许多其他消息以尝试进入该状态,您也无法将其强制进入给定状态。据我所知,您无法发送任何消息来设置环境以返回所需的 随机数 在下一次呼叫时获取;即使有这样的方法,所需的设置量也会使您实际尝试测试的内容模糊不清。 我希望其中一条建议能帮助你解决你的问题。 |
![]() |
3
1
这不起作用有两个原因(假设你使用的是Rhino.Mocks):
|
![]() |
4
1
您的示例的工作代码如下所示:
但是! 这将无法通过测试。原因是 犀牛模型 ,与大多数其他mocking框架一样,不包括MS Moles/Shims、TypeMock和其他使用profiler API的框架,无法强制类型从内部查看mocking方法。这是因为mocking框架围绕原始类型创建了一个代理类型,并将mocking逻辑注入代理,而不是注入原始类型本身。 所以,正如建议的那样,你应该提取 方法A 和 方法B 转换为单独的依赖项,以防您有需要测试的内容 方法C . 另一种完全可行的方法是从 ToTest公司 类,重写 方法A 和 方法B ,并测试派生类的实例。 |
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 2 年前 |
![]() |
shilin agre · 在Python中测试修饰函数 2 年前 |
![]() |
SlipScout · Unittest只传递单个值,而不是获取多个值 2 年前 |
![]() |
Alex · 从实际对象的实例返回默认模拟结果 2 年前 |