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

使用mockito的单元测试java可选

屠和洽
2023-03-14

我想测试一个返回可选客户机的方法。

public Optional<String> doSomething(String place) {
    Optional<Client> client = Optional.empty();
    try {
        client = Optional.ofNullable(clientHelper.get(place));
    } catch (Ex ex) {
        log.warn("Exception occured:", ex);
    }
    return client.isPresent() ? Optional.ofNullable(client.get().getPlaceDetails(place)) : Optional.empty();
}
  @Test
public void testClientHelper(){
    ClientHelper clientHelper =  Mockito.mock(ClientHelper.class);
    Optional<Client> client = Optional.empty();
    Mockito.when(Optional.ofNullable(clientHelper.get("IN"))).thenReturn(client);
    assertEquals( doSomething("IN"), Optional.empty())
}
org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Optional cannot be returned by get()
get() should return Client

我一直在跟踪这个链接Mockito错误,方法返回可选的

共有1个答案

江雅懿
2023-03-14

这里的问题是调用when时使用的内容不是mock。您将传递给它一个可选

如果我理解您在这里试图做什么,那么clientHelper将通过doSomething方法传递给对象,您希望模拟它以进行测试。如果是这样的话,它更典型地看起来是这样的:

interface ClientHelper {
    Client get(String place) throws Ex;
}

class ClassUnderTest {
    private final ClientHelper clientHelper;

    public ClassUnderTest(ClientHelper helper) {
        this.clientHelper = helper;
    }

    public Optional<String> doSomething(String place) {
        try {
            return Optional.ofNullable(clientHelper.get(place).getPlaceDetails(place));
        } catch (Ex ex) {
            log.warn("Exception: " + ex);
            return Optional.empty();
        }
    }
}

@Test
void testFullHelper() {
    Client client = mock(Client.class);
    when(client.getPlaceDetails("IN")).thenReturn("Details");
    ClientHelper helper = mock(ClientHelper.class);
    when(helper.get("IN")).thenReturn(client);
    ClassUnderTest obj = new ClassUnderTest(helper);
    assertEquals("Details", obj.doSomething("IN"));
}
 类似资料:
  • 问题内容: 我正在使用RestTemplate 方法将正文发布到端点。我需要使用Mockito为我的代码编写测试用例的帮助。返回类型为void,但是可以将其更改为,或者需要进行测试。我已经提到了许多其他文档,但是它们非常笼统,我尝试使用它们,但是由于and和return类型是不同的,所以大多数对我来说都不起作用。。任何建议表示赞赏。谢谢 这是我的Java课 问题答案: 您正在测试MyClass类中

  • 我在java中使用mockito编写单元测试。 这就是我要测试的声明。 电影是电影名称的集合,是识别电影的关键。 我嘲笑了守望者班 Mockito.when(watcher.watch(Matchers.any(Set.class))) “thenReturn”中包括什么??

  • 我正在为我的应用程序创建一个Spring BootAPI。我试图使用mockito对我的服务实现进行单元测试,以模拟出细节。该服务将向数据库添加一个新的构建实体。下面是服务实现和测试实现。楼宇服务: BuildingServiceImpl_UT

  • 问题内容: 有人可以帮我这个忙。我正在使用Jersey休息测试框架版本2.21(在Grizzly容器上)编写Rest资源的单元测试。 当我调试测试类时,看到myManager的模拟对象。但是,当调试进入“ MyResouce类”时,myManager对象将变为null并得到NullPointer异常。 尝试过其他人提供的解决方案,但是没有运气。请有人帮我。我将近三天就遇到这个问题。:( 我的资源类

  • 本文向大家介绍Java mockito单元测试实现过程解析,包括了Java mockito单元测试实现过程解析的使用技巧和注意事项,需要的朋友参考一下 待测试的服务接口: 预览 待测试的服务的实现类: Mockito 的更多高级用法请参考官方网站和框架配套 wiki。如果需要 mock 静态方法、私有函数等,可以学习 PowerMock, 拉取其源码通过学习单元测试来快速掌握其用法。 以上就是本文