public void test() {
FinalPumpkin pumpkin = mock(FinalPumpkin.class);
when(pumpkin.getName()).thenReturn("www.pkslow.com");
Assert.assertEquals("www.pkslow.com", pumpkin.getName());
报错信息如下:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.pkslow.basic.MockitoTest$FinalPumpkin
Mockito cannot mock/spy because :
- final class
这是因为低版本的
mockito
是不能
mock
final
类的。
解决方案:
改变
mockito
的版本,修改maven依赖如下:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>3.3.3</version>
</dependency>
重跑测试,问题解决!
欢迎访问
南瓜慢说 www.pkslow.com
获取更多精彩文章!
欢迎关注微信公众号<
南瓜慢说
>,将持续为你更新...
多读书,多分享;多写作,多整理。
Mockito是很常用的测试工具,使用过程中可能会遇到下面的问题:Mockito cannot mock/spy because : - final class问题重现:引入该依赖到项目的maven配置如下:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.3.3</versi
在上一篇博文
Mockito
对
final
类
型和方法的支持(二)中讲到,必须在src/test/resources/
mockito
-extensions目录中添加配置文件org.
mockito
.plugins.
Mock
Maker来实现
mock
final
类
型和方法。
从
Mockito
2.7.6版本开始,我们可以不再需要添加这个配置文件而直接使用免配置的inline
mock
making.我们只需...
但是在 Kotlin 开发的Android程序中,使用这两个框架真的如在Java中这么好用吗?事实上,许多Kotlin的Android程序员在使用
Mockito
时会遇到一些问题,例如:虽然这上面的问题,都是有解决方法的,但是显而易见的:任何在 Kotlin 上使用
Mockito
进行单元测试的程序员都会踩坑。为什么不提供一个专门针对于 Kotlin 场景下的单元测试呢? 于是就有了
mock
k。
解决上述出现的问题
支持 Kotlin,包括其语法糖
目前官方文档给出了一些存在的问题:Power
Mockito
的模拟/存根介绍
本项目的目的是介绍IntelliJ IDEA中
Mockito
框架和测试模板的较不常见的功能。
我将从模拟/存根的基本内容开始,以便为更高级的内容奠定基础。 他们将帮助我们强调与
Mockito
合作时我们日常遇到的问题,并提供解决方案:-)
未存根方法的默认行为
如果没有存根,则模拟方法将返回零,错误,空集合或空值-取决于所用方法的返回
类
型是什么。 它可能导致遇到NullPointerException。
java.lang.NullPointerException
at domain.InvoiceService.issueInvoice(ItemService.java:10)
at domain.a_missing_
mock
_for_organisation.ItemServiceTest.shouldIssueAnInvoic
import javax.servlet.http.HttpServletRequest;
import org.
mockito
.
Mock
;
import org.
mockito
.
Mockito
Annotations;
import org.testng.Assert;
import org.testng.annotations.Before
Class
;
import org.testng.annotations.Test;
import static org.
mockito
.
Mockito
.*;
public
class
MyServletTest {
@
Mock
HttpServletRequest request;
@Before
Class
public void setUp() {
Mockito
Annotations.init
Mock
s(this);
@Test
public void testMyServlet() {
// 模拟HttpServletRequest对象的行为
when(request.getParameter("username")).thenReturn("testuser");
// 创建一个MyServlet实例并调用doGet方法
MyServlet servlet = new MyServlet();
servlet.doGet(request, null);
// 验证MyServlet的行为是否符合预期
verify(request).getParameter("username");
Assert.assertEquals(servlet.getOutput(), "Hello, testuser!");
在这个例子中,我们使用@
Mock
注解来创建HttpServletRequest对象的模拟实例。然后,我们使用
Mockito
的when方法来指定当调用request.getParameter("username")方法时应该返回什么值。接着,我们创建一个MyServlet实例并调用doGet方法,最后使用
Mockito
的verify方法来验证request.getParameter("username")是否被调用了一次。最后,我们使用TestNG的Assert
类
来验证MyServlet的输出是否符合预期。