首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

scala mockito错误`值thenReturn不是Nothing`的成员`

问题描述:scala mockito错误值thenReturn不是Nothing的成员。

答案:在Scala中,当我们使用Mockito进行单元测试时,有时可能会遇到值thenReturn不是Nothing的错误。这个错误通常是因为我们在模拟对象的方法时,没有正确设置返回值类型。

要解决这个错误,我们需要确保我们正确设置模拟方法的返回值类型。通常情况下,我们可以使用thenReturn方法来设置模拟方法的返回值。然而,如果我们没有正确设置返回值类型,Scala编译器可能会推断返回值类型为Nothing,从而引发该错误。

为了解决这个问题,我们可以采取以下步骤:

  1. 确定模拟对象的方法返回值类型。在Scala中,方法返回值类型通常是通过方法定义的返回类型来确定的。例如,如果一个方法返回String类型,我们应该使用thenReturn("mocked value")来设置模拟方法的返回值。
  2. 检查模拟对象的方法是否被正确调用。有时候,这个错误可能是因为我们没有正确调用模拟对象的方法,导致编译器无法确定返回值的类型。确保在调用模拟对象的方法之前,使用when方法进行设置模拟。

下面是一个示例代码来演示如何解决这个错误:

代码语言:txt
复制
import org.mockito.Mockito._

// 创建一个模拟对象
val mockObject = mock(classOf[MyClass])

// 设置模拟方法的返回值类型
when(mockObject.methodToMock()).thenReturn("mocked value")

// 调用模拟方法
val result = mockObject.methodToMock()

// 验证模拟方法是否被调用
verify(mockObject).methodToMock()

// 断言结果是否符合预期
assert(result == "mocked value")

上述示例中,我们首先创建了一个模拟对象mockObject,然后使用when方法设置模拟方法methodToMock的返回值类型为String。接下来,我们调用模拟方法,并使用verify方法验证模拟方法是否被调用。最后,我们使用断言来验证结果是否符合预期。

需要注意的是,这只是解决值thenReturn不是Nothing错误的一个示例方法。根据具体情况,你可能需要进一步调查问题的根本原因,并采取适当的措施进行修复。

相关链接:无

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA实战:如何让单元测试覆盖率达到80%甚至以上

在对模拟对象进行测试时,我们可以设定模拟对象返回或行为,并用这些来测试测试目标类行为。 需要注意是,使用@Mock注解必须先使用Mockito.mock()初始化Mock对象。...具体来说,@InjectMocks注解通常用于注入一个类成员变量,这个成员变量通常是另外一个类实例(被mock对象)。...例如,可以使用Mockito.when()方法来模拟一个方法返回.需要注意是,Mockito.when()方法并不会真正地执行方法,而是返回了一个指定返回或设定行为,用于在测试中进行验证。...同样需要注意是,如果模拟对象方法参数不是一个基本类型或String,则需要手动匹配参数。Mockito.any()它可以用于匹配任意类型参数。...所以我们需要使用Mockito.any()去替代,让mock自己去模拟。以及thenReturn中返回要符合业务逻辑才能保证业务能够走通。

3.7K31

#Android单元测试学习总结「建议收藏」

actual) 断言两个对象引用不是同一个对象 assertNotSame(String message, Object expected, Object actual) 断言两个对象引用不是同一个对象...,然后运行测试类: 控制面板会告诉那一行出错了: 也就是说这里没有返回预期结果,说明我们编写业务逻辑是有错误,这时就需要改bug了。...,测试静态方法之前需要调用PowerMockito.mockStatic()方法来mock静态类,然后就通过when().thenReturn()方法指定静态方法模拟返回即可。...使用真实返回 如果在测试过程中又遇到不需要mock出来静态方法模拟返回,而是需要真实返回,怎么办呢,其实跟Mockito一样,PowerMockito同样提供thenCallRealMethod...那如果想做一些事而不是doNothing呢,跟Mockito一样,采用doAnswer: @Test public void testStaticVoid() throws Exception

5.1K20
  • 使用强大 Mockito 来测试你代码

    譬如说,这种测试类内部方法不会被调用,或者是用来填充某个方法参数。 Fake 是真正接口或抽象类实现体,但给对象内部实现很简单。譬如说,它存在内存中而不是真正数据库中。...true 6、验证 query 方法是否被 MyDatabase mock 对象调用 4.3 配置mock 当我们需要配置某个方法返回时候,Mockito 提供了链式 API 供我们方便调用...when(….).thenReturn(….)可以被用来定义当条件满足时函数返回,如果你需要定义多个返回,可以多次定义。...当你多次调用函数时候,Mockito 会根据你定义先后顺序来返回返回。Mocks 还可以根据传入参数不同来定义不同返回。...4.6 使用@InjectMocks在mockito中进行依赖注入 我们也可以使用@InjectMocks 注解来创建对象,它会根据类型来注入对象里面的成员方法和变量。

    11.1K60

    博文精选|Mockito使用指南

    但有时候你开发组件、模块依赖于第三方系统,他们开发流程不是你能控制,你又不想在开发测试过程中依赖于第三方系统,这时候mock就派上了用场。...我们可以自己编写自定义Mock对象实现mock技术,但是编写自定义Mock对象需要额外编码工作,同时也可能引入错误。...它提供对接口模拟,能够通过录制、回放、检查三步来完成大体测试过程,可以验证方法调用种类、次数、顺序,可以令 Mock 对象返回指定或抛出指定异常 PowerMock:这个工具是在EasyMock...verify(mockedList).get(0); } 对于stubbing,有以下几点需要注意: 对于有返回方法,mock会默认返回null、空集合、默认。...@InjectMocks 如果此注解声明变量需要用到mock对象,mockito会自动注入mock或spy成员 //可以这样写 @Spy BeerDrinker drinker = new BeerDrinker

    4.2K30

    Mockito模拟进行单元测试

    验证数据逻辑处理性,而其中mock较好框架就是Mockito。     ...Powermock后会提示classloader错误,因此待测试类中使用到了XML解析相关包和类,那么测试类前同样需要增加@PowerMockIgnore({"org.xml.*", "javax.xml...(999,mock.size()); }  用spy监控真实对象   Mock不是真实对象,它只是用类型class创建了一个虚拟对象,并可以设置对象行为 Spy是一个真实对象,但它可以设置对象行为...,因为add(2)没有被验证,所以下面的代码会失败抛出异常 verifyNoMoreInteractions(list2); } Mockito不是创建一个真实对象,而是模拟这个对象,他用简单..."first" Mockito.when(mockedList.get(0)).thenReturn("first"); 在Mock对象时候,创建一个proxy对象,保存被调用方法名(get),以及调用时候传递参数

    9.4K20

    Mockito模拟进行单元测试

    验证数据逻辑处理性,而其中mock较好框架就是Mockito。...Powermock后会提示classloader错误,因此待测试类中使用到了XML解析相关包和类,那么测试类前同样需要增加@PowerMockIgnore({"org.xml.*", "javax.xml...(999,mock.size()); } 用spy监控真实对象 Mock不是真实对象,它只是用类型class创建了一个虚拟对象,并可以设置对象行为 Spy是一个真实对象,但它可以设置对象行为...,因为add(2)没有被验证,所以下面的代码会失败抛出异常 verifyNoMoreInteractions(list2); } Mockito不是创建一个真实对象,而是模拟这个对象,他用简单..."first" Mockito.when(mockedList.get(0)).thenReturn("first"); 在Mock对象时候,创建一个proxy对象,保存被调用方法名(get),以及调用时候传递参数

    6.9K20

    单元测试框架spock和Mockito应用

    Mockito是一个模拟测试框架,可以让你用优雅,简洁接口写出漂亮单元测试。Mockito可以让单元测试易于可读,产生简洁校验错误。TDD测试驱动开发要求我们先写单元测试,再写实现代码。...在写单元测试过程中,由于各种依赖关系导致阻碍,我们必需用到Mockito类似的框架来完成资源、对象模拟。...SPACE_1 + iterator.next() } def "这是一个测试,用来在对象初始化之后mock对象"() { given: "创建对象后再Mockito...IndexOutOfBoundsException e) { re = 1 } expect: re == 1 } def "这是一个测试方法返回用例...listsss.get(3) } /** * 对于未指定mock方法,spy默认会调用真实方法,有返回返回真实返回,而mock默认不执行,有返回,默认返回null

    2.3K50

    Java单元测试框架之Mockito指南

    *;final ArrayList mockList = mock(ArrayList.class);// 设置方法调用返回when(mockList.add("test2")).thenReturn...ArgumentTestService.class) 创建mock对象; @Mock private ArgumentTestService argumentTestService; // 若改注解修饰对象有成员变量...: 验证失败 } 十二、高级特性:修改没有测试桩调用默认返回 可以指定策略来创建 mock 对象返回。...:https://www.iteye.com/blog/hotdog-916364 改变 mock 返回Mockito中RETURNS_DEEP_STUBS对于enum处理 – 夜明孤行灯 五分钟了解...对象属性及方法默认Mockito 中被 Mocked 对象属性及方法默认 - Boblim - 博客园 单元测试工具之 Mockito:单元测试工具之Mockito_mockito作用-

    2.5K11

    SpringBoot - 单元测试利器Mockito入门

    文章目录 Mock 测试 What's Mockito 使用 Mockito pom依赖 Demo Code 【常规操作】 【MockitothenReturn thenThrow verify...---- What’s Mockito Mockito 是一种 Java Mock 框架,主要就是用来做 Mock 测试,它可以模拟任何 Spring 管理 Bean、模拟方法返回、模拟抛出异常等等...mock userDao Bean 方法,而不是真实 userDao Bean。...当我们创建了一个假 userDao 后,我们需要为这个 mock userDao 自定义方法返回,这里有一个公式用法,下面这段代码意思为,当调用了某个 Mock 对象方法时,就回传我们想要自定义结果...除了最基本 Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ),还提供了其他用法让我们使用。

    16.4K42

    Mockito和PowerMock用法

    在单元测试中,我们往往想去独立地去测一个类中某个方法,但是这个类可不是独立,它会去调用一些其它类方法和service,这也就导致了以下两个问题:外部服务可能无法在单元测试环境中正常工作,因为它们可能需要访问数据库或者使用一些其它外部系统...); when(request.getParameter("foo")).thenReturn("boo"); // 注意:mock()是Mockito静态方法,可以用@mock注解替换 private...(person.getName()).thenReturn("xiaoming"); when(person.getName()).thenReturn("xiaohong"); // 3、mockito...模拟测试无返回方法 Person person =mock(Person.class); doNothing().when(person).remove(); // 4、mockito还能对被测试方法强行抛出异常...,但是spy() 或者@spy 可以监视一个真实对象,对它进行方法调用时它将调用真实方法,同时也可以设定这个对象方法让它返回我们期望

    3.1K32

    mockito入门

    前言 最近在项目中跑单元测试发现直接使用springboot自带测试,一整套跑起来花费数十分钟,这是无法忍受,考虑到功能特殊性,想到了Spring测试包自带mockito单元测试,所以进行初次尝试使用...)) { when(OrderE.print()).thenReturn(333); // orderEMockedStatic.close...(anyInt())).thenReturn(101); when(orderC.print(anyInt())).thenReturn(201); boolean...Mockito.mockStatic(OrderE.class);会报错,需要导入mockito-inline包,具体原因后续分析 常见错误异常有,这错误异常很友好都提示了如何操作: org.mockito.exceptions.base.MockitoException...站在项目的角度,项目越大不可能为了某个功能跑一次服务,因为服务还有其他功能,所以功能测试就成了很好解决方案,你可以随意mock,返回想要,最大角度覆盖所有测试,唯一缺点是,你需要考虑所有的依赖注入

    37140

    在多线程构建场景下Powermockito无法在不同类中Mock同一个静态方法

    由于在测试中直接调用 C.getSomeObject() 会导致一些不可预期错误,所以我想对AB类进行测试就必须使用Mock,于是我那么写: Class ATest{true@Beforetruepublic...由于我不是Powermockito专家,所以无法深入去探究这个问题原因,但是我想,这应该是和静态方法本身在一个JVM内唯一性有关,我截取了网上两个解释供参考: Explanation 1 Without...("C"); The stubbing is clearly not finished until the last call thenReturn is completed, right....Explanation 2 For healthy scenarios Mockito plays nicely with threads....Check out a [http://mockito.googlecode.com/svn/tags/latest/javadoc/org/mockito/Mockito.html#22 timeout

    5.8K30

    一起学Mockito(一)

    我以前认为单元测试是建立在开发环境基础上,但是现实是你没有开发环境,用最简单基于函数单测姿势保证覆盖率,说到这里总有种想要撂挑子冲动......但是那没办法,写代码从来都是一份搬砖活,不是你一个...Mockito是什么就不介绍了,就看看这玩意咋用吧,原理在前边文章已经介绍过了。...1、mockito验证是否相等 import org.junit.Test; import org.springframework.web.servlet.ModelAndView; import...static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when...(homeController,times(2)).index(); } 3、参数匹配 有时候我们调一个函数输入很随意,总不能给其逐个设置吧,所以这块要用到匹配去做。

    50730

    junit4整合PowerMockito进行单元测试

    ,单测要覆盖到方法中每一行代码 自动断言:每一段单测代码都应该有自己断言方法,而不是通过打印再人工查看正确性 所以我们就有了Mockito,它可以模拟对象,模拟对象方法返回,来完成mock...在插入前,我们根据entity.value是否有,给予entity.status ---- 故此,上面的代码需要连接数据库,我们在单测时,直接对PowerMockitoMapper进行mock即可...假设有一个无返回方法,我们要针对它进行测试。...由于它没有返回,就没有办法对其返回进行断言校验。 那么针对这种情况,一个方法,就算是无返回情况。内部一定做了一些什么操作。...有些时候,代码是会发生异常,那么在单测环境下,我们需要判断这些异常是什么,是不是符合预期 如下这个方法,我们只需要传个null,就会发生NullPointException异常 package

    1.1K40

    Java单元测试Mock工具Mockito介绍

    2、分而测之 以上面的例子来说,生产环境中就是要从硬件输入,那这块是不是不测试呢?...二、Mockito介绍 Mockito是一款优秀Mock工具,以下是其相关介绍: Mockito源码: https://github.com/mockito/mockito Mockito2.x...(mockUserService .findUser( Mockito.anyInt()).thenReturn( new User(123, "edward",...Mockito.when(..).thenReturn when传方法,thenReturn传递要返回结果,如果when要带参数,一般是这样格式, Mockito.anyInt(),Mockito定义了很多常用类型...Assert.assertEquals(2021, now.getYear()); } } 这里要注意dummy一定要放在mockStatic前面,因为后面一旦Mock了,所有静态方法都被Mock掉,of静态方法没有设置返回会报错

    3.3K40
    领券