Mockito打桩构造函数和静态方法
2023-12-29 17:19:44
单体测试中,需要模拟测试对象方法内创建的新对象的动作
try (var mocked = mockConstruction(Sample.class, (mock, context)-> {
// 在测试方法内每次创建Sample对象时,会得到模拟对象mock,对mock进行打桩
when(mock.method1(any())).thenReturn("abcd");
})) {
// 执行测试方法
}
单体测试中,需要模拟测试对象方法内调用的另一个类的静态方法
// 对有参数的静态方法进行打桩
try (var mocked = mockStatic(Sample.class)) {
mocked.when(() -> Sample.method1(any(String.class)))
.thenAnswer(invocation -> {
var arg1 = (String) invocation.getArgument(0);
// 做一些操作
// 当静态方法返回值类型为void时,固定返回null,否则返回对应类型的值就行
return null;
});
// 执行测试方法
// 验证静态方法被执行一次
mocked.verify(()->Sample.method1("abcd"), times(1));
}
// 对无参数的静态方法进行打桩,官方示例
try (var mocked = mockStatic(Foo.class)) {
mocked.when(Foo::method).thenReturn("bar");
assertEquals("bar", Foo.method());
mocked.verify(Foo::method);
}
注意:两种打桩方式,都需要放在try() {}块里,或者在@BeforeEach方法中创建,在@AfterEach方法中调用close()方法手动关闭。否则会影响相同测试线程中的后续测试。
文章来源:https://blog.csdn.net/langzitianya/article/details/135292535
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!