【发布时间】:2019-04-03 16:43:48
【问题描述】:
我正在编写一些代码来使用 mockito 和 junit 测试 web 服务,所以我在 hasSize(2) 中遇到了一个问题,我已经注入了控制器并调用了 findAll 方法,它返回了一个 Employe 列表,但是错误坚持,在调试模式下它告诉我集合是空的,但是,它不是。 错误是:
java.lang.AssertionError: JSON path "$" Expected: a collection with 大小 但是:集合大小为
这里是类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class GestionPointage3ApplicationTests {
private MockMvc mockMvc;
@InjectMocks
private EmployeController employeeController ;
@Mock
private EmployeService employeeService;
@Mock
private ModelMapper modelMapper;
@Before
public void setUp() throws Exception{
MockitoAnnotations.initMocks(this);
mockMvc=MockMvcBuilders.standaloneSetup(employeeController).build();
}
@Test
public void testgetAllEmployeeWithModelMapper() throws Exception{
Employe emp1 = new Employe("Hamza", "Khadhri", "hamza1007", "123");
Employe emp2 = new Employe("Oussema", "smi", "oussama", "1234");
List<Employe> Employees= Arrays.asList(emp1, emp2);
EmployeDTO dto1 = new EmployeDTO("Hamza", "Khadhri", "hamza1007", "123");
EmployeDTO dto2 = new EmployeDTO("Oussema", "smi", "oussama", "1234");
//when(modelMapper.map(emp1,EmployeDTO.class)).thenReturn(dto1);
// when(modelMapper.map(emp2,EmployeDTO.class)).thenReturn(dto2);
when(employeeService.findAll()).thenReturn(Employees);
mockMvc.perform(get("/employe/dto"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].nom", is("Hamza")))
.andExpect(jsonPath("$[0].prenom", is("Khadhri")))
.andExpect(jsonPath("$[0].login", is("hamza1007")))
.andExpect(jsonPath("$[0].mp", is("123")))
.andExpect(jsonPath("$[1].nom", is("Oussema")))
.andExpect(jsonPath("$[1].prenom", is("smi")))
.andExpect(jsonPath("$[1].login", is("oussama")))
.andExpect(jsonPath("$[1].mp", is("1234")));
verify(employeeService,times(1)).findAll();
verifyNoMoreInteractions(employeeService);
}
}
这是控制器:
@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping("/employe")
public class EmployeController {
@Autowired
private EmployeService employeService;
@Autowired
private ModelMapper modelMapper;
@GetMapping("/dto")
public List<Employe> findAll() throws Exception{
return employeService.findAllEmployeActive();
}
}
方法签名:
public List<Employe>findAll() throws Exception;
public List<Employe>findAllEmployeActive() throws Exception;
堆栈跟踪错误:
java.lang.AssertionError:预期状态: 但原为: org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:55) 在 org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:82) 在 org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:619) 在 org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:178) 在 com.cynapsys.pointage.GestionPointage3ApplicationTests.testgetAllEmployeeWithModelMapper(GestionPointage3ApplicationTests.java:66) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73) 在 org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 在..
【问题讨论】:
标签: json spring-boot junit mocking hamcrest