Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧控制器的Mockito测试_Spring_Spring Mvc_Mocking_Mockito - Fatal编程技术网

Spring 弹簧控制器的Mockito测试

Spring 弹簧控制器的Mockito测试,spring,spring-mvc,mocking,mockito,Spring,Spring Mvc,Mocking,Mockito,我正试图用Mockito测试我的Spring控制器,但实际上我不知道如何在不使用@Mock的情况下做到这一点。 此外,测试方法返回NullPointerException,因为它看不到任何用户,实际上根本看不到任何用户角色。 有没有办法测试我的控制器 (控制器类) 还有我的测试课 @RunWith(MockitoJUnitRunner.class) public class LoginControllerTest { @InjectMocks private LoginCon

我正试图用Mockito测试我的Spring控制器,但实际上我不知道如何在不使用@Mock的情况下做到这一点。 此外,测试方法返回NullPointerException,因为它看不到任何用户,实际上根本看不到任何用户角色。 有没有办法测试我的控制器

(控制器类)

还有我的测试课

@RunWith(MockitoJUnitRunner.class) 
public class LoginControllerTest {

    @InjectMocks
    private LoginController controllerUT = new LoginController();

    @Mock
    private ModelMap model;

    @Mock
    private LoginForm loginForm;

    @Mock
    private BindingResult result;

    @Mock
    private SessionStatus status;

    @Mock
    private LoginValidator validator;

    @Mock
    private UserDao userDao;

    @Mock
    private User useк;

    @Test
    public void testSendRedirect(){
        final String target = "login";
        String nextPage = controllerUT.postSubmittedForm(model, loginForm, result, status);
        assertEquals(target, nextPage);
    }

}

首先,您似乎缺少
loginForm.getLogin()和
userDao.findByLogin(loginForm.getLogin())
user.getRole().getName()的存根。如果没有这种存根,在模拟中调用的这些方法将返回默认值(即
null

因此,您可能需要添加:

when(loginForm.getLogin()).thenReturn(login);
when(userDao.findByLogin(login)).thenReturn(user);
when(user.getRole()).thenReturn(role);
when(role.getName()).thenReturn("Admin");
您需要更改不同测试的返回值。 根据用户和角色的实现类,您可以简单地提供真实的实例。 对于模拟结果出现错误的测试,您需要添加此存根:

when(result.hasErrors()).thenReturn(true);

否则,将返回默认值
false

请在测试方法中显示NullPointerException的堆栈跟踪。测试运行:1,失败:0,错误:1,跳过:0,经过的时间:0.365秒第68行:if(user.getRole().getName().equals(“Admin”)){
when(result.hasErrors()).thenReturn(true);