MockMvc 测试:model() 和 hasItem() 方法未定义
MockMvc test: model() and hasItem() methods are undefined
我想测试我的控制器并使用以下方法对其进行测试:
package spittr.web;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.servlet.view.InternalResourceView;
import spittr.data.Spittle;
import spittr.data.SpittleRepository;
public class SpittleControllerTest {
@Test
public void shouldShowRecentSpittles() throws Exception {
List<Spittle> expectedSpittles = createSpittleList(20);
SpittleRepository mockRepository = Mockito.mock(SpittleRepository.class);
Mockito.when(mockRepository.findSpittles(Long.MAX_VALUE, 20))
.thenReturn(expectedSpittles);
SpittleController controller = new SpittleController(mockRepository);
MockMvc mockMvc = standaloneSetup(controller)
.setSingleView(
new InternalResourceView("/WEB-INF/views/spittles.jsp"))
.build();
mockMvc.perform(get("/spittles"))
.andExpect(view().name("spittles"))
.andExpect(model().attributeExists("spittleList"))
.andExpect(model().attribute("spittleList", hasItems(expectedSpittles.toArray())));
}
private List<Spittle> createSpittleList(int count) {
List<Spittle> spittles = new ArrayList<Spittle>();
for (int i=0; i < count; i++) {
spittles.add(new Spittle("Spittle " + i, new Date()));
}
return spittles;
}
}
但是编译器无法理解assert部分的model()方法和hasItem()方法,是哪个包还是哪个.我应该将 jar 文件导入到此文件吗?
model()
是 org.springframework.test.web.servlet.result.MockMvcResultMatchers
上的静态方法
view()
也是 org.springframework.test.web.servlet.result.MockMvcResultMatchers
上的静态方法
而org.springframework.test.web.servlet.result.MockMvcResultMatchers
由org.springframework:spring-test
提供。
我怀疑你的类路径中有这个,否则 none 对 MockMvc
的引用将编译。
我认为您遇到的问题是 hasItems()
,它来自 org.hamcrest.Matchers
。此依赖项的 Maven 坐标为:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
我想测试我的控制器并使用以下方法对其进行测试:
package spittr.web;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.servlet.view.InternalResourceView;
import spittr.data.Spittle;
import spittr.data.SpittleRepository;
public class SpittleControllerTest {
@Test
public void shouldShowRecentSpittles() throws Exception {
List<Spittle> expectedSpittles = createSpittleList(20);
SpittleRepository mockRepository = Mockito.mock(SpittleRepository.class);
Mockito.when(mockRepository.findSpittles(Long.MAX_VALUE, 20))
.thenReturn(expectedSpittles);
SpittleController controller = new SpittleController(mockRepository);
MockMvc mockMvc = standaloneSetup(controller)
.setSingleView(
new InternalResourceView("/WEB-INF/views/spittles.jsp"))
.build();
mockMvc.perform(get("/spittles"))
.andExpect(view().name("spittles"))
.andExpect(model().attributeExists("spittleList"))
.andExpect(model().attribute("spittleList", hasItems(expectedSpittles.toArray())));
}
private List<Spittle> createSpittleList(int count) {
List<Spittle> spittles = new ArrayList<Spittle>();
for (int i=0; i < count; i++) {
spittles.add(new Spittle("Spittle " + i, new Date()));
}
return spittles;
}
}
但是编译器无法理解assert部分的model()方法和hasItem()方法,是哪个包还是哪个.我应该将 jar 文件导入到此文件吗?
model()
是 org.springframework.test.web.servlet.result.MockMvcResultMatchers
view()
也是 org.springframework.test.web.servlet.result.MockMvcResultMatchers
而org.springframework.test.web.servlet.result.MockMvcResultMatchers
由org.springframework:spring-test
提供。
我怀疑你的类路径中有这个,否则 none 对 MockMvc
的引用将编译。
我认为您遇到的问题是 hasItems()
,它来自 org.hamcrest.Matchers
。此依赖项的 Maven 坐标为:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>