gpt4 book ai didi

java - Spring mvc 测试+mockito。 @ModelAttribute 空指针

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:43 25 4
gpt4 key购买 nike

我正在尝试对一个简单的 Spring-MVC-Controller 进行单元测试,但即使是最简单的单元测试也会失败,因为 @ModelAttribute 抛出 NullpointerException。我的问题是:如何模拟/设置 ModelAttribute?我尝试从存储库中模拟 findAll() 方法,但失败了。

以下是我使用的类:

测试上下文:

@Configuration
public class TestContext {

@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}

@Bean
public BenutzerRepository benutzerRepository() {
return Mockito.mock(BenutzerRepository.class);
}
}

独立BenutzerController:

@RunWith(MockitoJUnitRunner.class)
@SpringApplicationConfiguration(TestContext.class)
public class StandaloneBenutzerControllerTest {

public MockMvc mockMvc;
@Mock
private BenutzerRepository benutzerRepositoryMock;
@Mock
private Benutzer benutzer;

@Before
public void setUp() {

this.benutzerRepositoryMock = Mockito.mock(BenutzerRepository.class);
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");

Benutzer hauke = new Benutzer("test","tester", "test@tester.de");
List<Benutzer> mockList = new ArrayList<Benutzer>();

mockList.add(hauke);
mockMvc = MockMvcBuilders.standaloneSetup(new BenutzerController()).setViewResolvers(viewResolver)
.build();
}

@Test
public void testSimpleStatus() throws Exception {

Mockito.when(benutzer.getEmail()).thenReturn("test@tester.de");
//Mockito.when(benutzerRepositoryMock.findAll()).thenCallRealMethod();
//Mockito.when(benutzerRepositoryMock.findAll()).thenReturn(userList);

this.mockMvc.perform(get("/verwaltung"))
.andExpect(status().isOk())
.andExpect(forwardedUrl("/WEB-INF/jsp/verwaltung.jsp"));
}
}

BenutzerController:抛出空指针的部分

@ModelAttribute("userList")
public List<Benutzer> userList() {
return toList(repository.findAll());
}

最佳答案

解决方案就像 Si mo 暗示通过构造函数为测试的 BenutzerController 设置模拟存储库:

 mockMvc = MockMvcBuilders.standaloneSetup( new BenutzerController(benutzerRepositoryMock)).setViewResolvers(viewResolver).build();

关于java - Spring mvc 测试+mockito。 @ModelAttribute 空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34175947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com