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

使用mockMvc的Spring-JUnit测试

陈正业
2023-03-14

我试图使用spring和mockito对rest控制器进行单元测试。这是我的主控制器方法。

public static final String AUTHENTICATE_USER_URI = "/user/authenticate";

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

@Autowired
User user;

@Autowired
AuthenticationService authService;

@CrossOrigin
@RequestMapping(value = (AUTHENTICATE_USER_URI), method = RequestMethod.GET, produces = "application/json")
private User getUserAuthenticationDetails(
        @RequestParam("name") String name,
        @RequestParam("password") String password) throws NamingException,
        AuthenticationException {
    boolean isAuth = true;

    // checks user credentials
    isAuth = authService.isAuthenticated(name, password);

    if (isAuth) {
        logger.debug("User is authenticated");
        user = authService.getUserDetails(user, name);
        // // persistUserInDB(user);
        return user;
    } else {
        logger.debug("User is not authenticated");
        return null;
    }
}

这是我的JUnit测试:

@RunWith(MockitoJUnitRunner.class)
public class RestfulControllerTest {

    private static final String AUTHENTICATE_USER_TEST_URI = "http://localhost:8086/LDAPAuthenticationApp/user/authenticate";

    private MockMvc mockmvc;

    @Mock
    private AuthenticationService authService;

    @Before
    public void setUp() {
        mockmvc = MockMvcBuilders.standaloneSetup(new RestfulController())
            .setHandlerExceptionResolvers(exceptionResolver())
            .setMessageConverters(messageConverters())
            .build();
    }

    private MappingJackson2HttpMessageConverter messageConverters(){
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        return converter;
    }

    private HandlerExceptionResolver exceptionResolver() {
        // exceptionResolver implementation here
    }

    // success test case
    @Test
    public void testGetUserAuthenticationDetails() throws Exception {
        String[] name={"amol84","arpan","juhi"};
        String value="pegasus84";
        when(authService.isAuthenticated(any(String.class), any(String.class))).thenReturn(true);
        when(authService.getUserDetails(any(User.class),any(String.class))).thenReturn(any(User.class));
        for(int i=0;i<3;i++){
             mockmvc.perform(get(AUTHENTICATE_USER_TEST_URI).param("name", name[i]).param("password", value))
              .andDo(print()).andExpect(MockMvcResultMatchers.status().isOk())
              .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON));
    }
    verify(authService, atMost(3)).isAuthenticated(any(String.class), any(String.class));
}

在输出响应中,测试失败,因为它得到404错误,但它预期成功代码为200。我相信我已经正确设置了独立配置,我会做错什么。为什么URI没有正确映射到方法?请注意,对于来自应用程序前端的相同URI,它工作正常。以下是我使用Postman工具为chrome测试的正确200响应的完整URI:

http://localhost:8086/LDAPAuthenticationApp/user/authenticate?name=amol84

共有1个答案

鲁昕
2023-03-14

也许你应该试试这个url:

private static final String AUTHENTICATE_USER_TEST_URI = "/user/authenticate";
 类似资料:
  • 我需要jUnit测试的帮助,我的结果是json文件,我需要测试该文件的长度,问题是在jsonPath函数中没有这样的方法。 这里是我的测试方法,预期长度是7。如有任何帮助,我将不胜感激,谢谢

  • 我试图测试我的一个控制器,它返回给我一个get方法上的对象列表,以填充我页面上的下拉列表。 我试图使用MockMvc和Hamcrest编写一个JUnit测试来测试相同的内容。 我想比较对象列表,并测试它是否失败。 这就是我获取模型属性的方式: 提前谢了。

  • ObjectBean类 所以我的问题是:我如何使用Spring mockMVC测试这个方法?

  • 正在使用Spring MVC创建Restful Web服务... 下面是我的pom.xml: WEB-INF/web.xml: web-inf/mvc-dispatcher-servlet.xml: src/main/resources/database_db.xml: @Repository public class UserDAO{ } SRC/Test/Java: 这就像在print()语句

  • 我正在使用spock框架为Spring 3控制器类编写测试。我在尝试执行其中一个测试(GET请求)时收到以下错误。请注意,同一类中的所有其他测试(POST请求)都按预期工作。 控制器签名 斯波克试验 组织。springframework。网状物util。NestedServletException:请求处理失败;嵌套的异常是java。lang.IllegalArgumentException:参数

  • 我的控制器是: 而且效果很好。但我不能测试它。我试过: 但它在以下方面失败了: 所以:如何测试?