当前位置: 首页 > 知识库问答 >
问题:

重构时Mockito模拟对单元测试的影响

房学文
2023-03-14

我正在使用mocks来模拟那些需要几个小时才能建立起来的对象,因为我的团队似乎很喜欢极深的聚合对象。

谢谢!

共有1个答案

谭景明
2023-03-14

重构可能会破坏依赖于模拟的代码,这是正确的。Mockito不知道foo(int start,int end)foo(int start)方法完成了相同的任务,如果您在重构时在它们之间切换,Mockito模拟很可能会中断。Mockito确实为未挂接的调用提供了合理的默认值,如0、null或空列表;然而,许多重构将需要更现实的值。

一般而言,我听说过当系统正常运行时,测试或测试夹具出现故障的倾向被称为“脆性”。

部分原因是模仿框架的选择:Mockito作为EasyMock的分叉开始生活,如果调用太多或太少,EasyMock将默认失败,但Mockito将忽略意外调用,并提供“不错”的默认行为。另一部分是由您如何使用框架决定的,其中验证不必要的细节(不重要的调用或参数)可能会使模拟变得比它们必须要变得更脆弱。

莫基托擅长嘲弄的东西:

  • 外部、资源密集型依赖关系(或其包装)。
  • 接口。这里几乎不会出错。
  • 小API表面。如果您的API surface有一个或两个方法,就不太可能捕捉到您描述的情况。
  • 还不存在的合作者,即使它们有很大的API表面。临时脆性测试可以稍后修复。

Mockito不适合嘲弄的东西:

    null
 类似资料:
  • 遇到了另一个常见的问题,同时为Spring Batch编写单元测试和集成测试组件是如何模拟域对象。一个很好的例子是StepExecutionListener,如下所示: public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { public ExitStatus afterSte

  • 为了获得可重用和可测试的rxjava代码,我使用ObservableTransformers分离了代码的各个部分。它在生产中工作得很好,但是测试它并不像预期的那么容易,因为我似乎无法模拟那些观察到的ransformers。 when(observableTransformer.apply(any())).thenreturn(observable.just(“mockedtext”)); 一旦调用

  • 我有一个问题与存根我的存储库。有人建议我只创建另一个application.properties(我没有这样做),并使用像H2这样的内存数据库。不过,我想知道我是否可以只是存根调用,这样当调用MyDataService.FindById(id)而不是试图从数据库中获取它时,就可以返回一个模拟对象?

  • 问题内容: 我正在使用RestTemplate 方法将正文发布到端点。我需要使用Mockito为我的代码编写测试用例的帮助。返回类型为void,但是可以将其更改为,或者需要进行测试。我已经提到了许多其他文档,但是它们非常笼统,我尝试使用它们,但是由于and和return类型是不同的,所以大多数对我来说都不起作用。。任何建议表示赞赏。谢谢 这是我的Java课 问题答案: 您正在测试MyClass类中

  • 问题内容: 我知道关于模拟和测试有很多问题,但是我发现没有任何问题可以完美地帮助我,因此我仍然对理解以下内容有疑问: 如果我弄错了,请纠正我,但据我所知,单元测试用于隔离测试一个特定类的业务逻辑,并且如果有外部需要的任何对象,它们将被模拟。因此,例如,如果我有一个简单城市居民的管理系统,该系统将居民添加到列表中并按姓名返回居民(假设:居民仅包含一些基本个人信息),如下所示: 如果现在我要进行单元测