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

Mockito和string对象

侯兴为
2023-03-14
@Path("search")
public class SearchWebService {

private static final Logger logger = Logger.getLogger(SearchWebService.class);

@EJB
UserServiceInterface userService;

@GET
@Path("/json/{searchstring}")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@RolesAllowed("User")
public List getJSONFromSearchResults(@PathParam("searchstring") String searchString, @Context HttpServletRequest request) {
    logger.info("getJSONFromSearchResults called");

    //Users own email
    String ownemail = request.getRemoteUser();

    if (searchString.contains(" ")) {
        //Split String in two at first space
        String names[] = searchString.split("\\s+", 2);

        List userList = userService.searchByFullName(names[0], names[1], ownemail);
        if (userList.size() > 0) {
            return userList;
        } //Check for cases where the last name contains spaces
        else {
            return userService.searchByLastName(searchString, ownemail);
        }
    }
    return userService.searchBySingleName(searchString, ownemail);
}
}

我在SearchString.contains(“”),我正在尝试调用“when(...).thenreturn(...)”但是mockito抛出了一个异常,说“不能mock/spy class java.lang.String”我不确定在测试这个web服务时我做得是否正确。也许有别的方法可以做到这一点?下面是我的测试类:

public class SearchWebServiceTest {

@Mock
UserServiceInterface mockedUserService;
@Mock
Logger mockedLogger;
@Mock
HttpServletRequest mockedRequest;
@Mock
String mockedString;
@Mock
List<SearchResultsContainer> mockedUserList;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

@Test
public void testGetJSONFromSearchResultsSpace() throws Exception {
    when(mockedRequest.getRemoteUser()).thenReturn("email");
    when("StringWithSpace".contains(" ")).thenReturn(true);
    when("StringWitchSpace".split("\\s+", 2)).thenReturn(null);
    when(mockedUserService.searchByFullName("name1", "name2", "email")).thenReturn(mockedUserList);
    assertTrue(mockedUserList.size() > 0);
}

共有1个答案

鞠嘉誉
2023-03-14

不能模拟final类(如String)。这是该框架的一个已知限制。

你可以参考这个链接。

Mockito验证不失败

 类似资料:
  • Arduino编程中使用的第二种字符串是String Object。 什么是对象? 对象是包含数据和函数的构造。 String对象可以像变量一样创建并分配值或字符串。 String对象包含函数(在面向对象编程(OOP)中称为“方法”),它们对String对象中包含的字符串数据进行操作。 下面的草图和说明将清楚说明对象是什么以及如何使用String对象。 例子 (Example) void setu

  • 概述 String对象是 JavaScript 原生提供的三个包装对象之一,用来生成字符串对象。 var s1 = 'abc'; var s2 = new String('abc'); typeof s1 // "string" typeof s2 // "object" s2.valueOf() // "abc" 上面代码中,变量s1是字符串,s2是对象。由于s2是字符串对象,s2.val

  • 概述 String.fromCharCode() 概述 String对象是JavaScript原生提供的三个包装对象之一,用来生成字符串的包装对象实例。 var s = new String("abc"); typeof s // "object" s.valueOf() // "abc" 上面代码生成的变量s,就是String对象的实例,类型为对象,值为原来的字符串。实际上,String对象的

  • 主要内容:String 对象中的属性,String 对象中的方法,特殊字符JavaScript String 对象用于处理字符串,其中提供了大量操作字符串的方法,以及一些属性。 创建 String 对象的语法格式如下: var val = new String(value); var val = String(value); 其中参数 value 为要创建的字符串或字符串对象。 JavaScript 中,字符串和字符串对象之间能够自由转换,因此不论是创建字符串对象还是直

  • 我试图用Mockito mock对象替换对象。通常的方法是使用Springockito使用xml: 目前,我正在尝试使用Spring的JavaConfig来完成这项工作。突然之间,Java表达式比xml要详细得多: 我发现了一个名为Springockito annotations的库,它允许您执行以下操作: 显然,更漂亮:)唯一的问题是,这个上下文加载器不允许我对其他bean使用和JavaConf

  • 问题内容: 我直到今天才开始了解Mockito。我写了一些简单的测试(使用JUnit,请参见下文),但是我不知道如何在Spring的托管bean中使用模拟对象。什么是使用Spring的最佳实践。我应该如何向我的bean注入模拟依赖项? 你可以跳过这一步,直到回到我的问题。 首先,我学到了什么。这是一篇很好的文章Mocks Are n’t Stubs,它解释了基础知识(Mock的检查行为验证而不是状