我有最后一节课,大概是这样的:
public final class RainOnTrees{
public void startRain(){
// some code here
}
}
我在其他类中使用这个类,如下所示:
public class Seasons{
RainOnTrees rain = new RainOnTrees();
public void findSeasonAndRain(){
rain.startRain();
}
}
在Seasons.java
的JUnit测试类中,我想模拟RainonTrees
类。我怎么能用莫基托做到这一点?
摩基托2现在支持最终的类和方法!
但就目前而言,这是一个“孵化”功能。它需要一些步骤来激活它,这些步骤在Mockito 2的新内容中描述:
对最终类和方法的嘲弄是一个潜移默化的、可选的特性。它使用Java代理检测和子类化的组合,以支持这些类型的可模仿性。由于此功能与我们当前的机制不同,并且此功能有不同的限制,并且由于我们希望收集经验和用户反馈,因此必须显式激活此功能才能可用;通过mockito扩展机制,可以创建文件src/test/resources/mockito-extensions/org.mockito.plugins.mockmaker
,其中包含一行:
mock-maker-inline
创建此文件后,Mockito将自动使用此新引擎,您可以执行以下操作:
final class FinalClass {
final String finalMethod() { return "something"; }
}
FinalClass concrete = new FinalClass();
FinalClass mock = mock(FinalClass.class);
given(mock.finalMethod()).willReturn("not anymore");
assertThat(mock.finalMethod()).isNotEqualTo(concrete.finalMethod());
在后续的里程碑中,团队将带来一种使用该特性的编程方式。我们将识别并为所有不可模仿的场景提供支持。请继续关注并告诉我们您对此功能的看法!
仅在MockitoV2中可以模拟最终/静态类/方法。
在您的分级文件中添加以下内容:
testImplementation 'org.mockito:mockito-inline:2.13.0'
这在Mockito v1中是不可能的,从Mockito常见问题:
Mockito的局限性是什么
>
需要Java 1.5+
无法模仿最终类
...
问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are
我尝试测试一个发送jms消息的类,但无法模拟JmsTemplate JmsProducer.class: JmsProducerTest。类别: 当我运行这个测试用例时,它给了我:java。lang.IllegalArgumentException:对象不是声明类的实例 你对这个问题有什么想法吗?
我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi
我的测试存根是 我在这里做错了什么?
我想通过ts-Mockito@2.5.0创建一个类的模拟对象,但我无法正确设置它。 以下是设计的测试用例: 正如测试用例所暗示的,我希望从我的模拟中返回“I AM mocked”的值。 我应该如何设置模拟,使其按预期工作? 旁白:这个测试用例只是为了展示我正在经历的奇怪行为。这不是我真正的测试。我想在不同服务的单元测试中使用模拟。)
问题内容: 我有一个建设者: 在模仿器中模拟生成器将使我对每种方法都无效。因此,有没有一种简单的方法可以使生成器在每次调用函数时返回自身,而无需使用来模拟每个函数本身。 问题答案: 您可以使用RETURN_DEEP_STUBS模拟链接API。 如果您知道将调用您的构建器的确切顺序,那么以下是如何使用它的示例: 不幸的是,这不会为您提供一种模拟“所有各种生成器方法”的通用方法,以使它们始终返回此值,