Search code examples
unit-testingspring-data-jpamockitojunit4

Junit Test case : java.lang.exception: json can not be null or empty


I am trying to write Test case for controller using JUnit and mockito. But I am getting error as JSON can not be null or empty. can any one please tell me what I m doing wrong?

DepartmentController

@RestController
@RequestMapping("/api.spacestudy.com/SpaceStudy")
public class DepartmentController {

    @Autowired
    DepartmentService depService;

    @GetMapping("/Control/SearchFilter/loadDepartments")
    public ResponseEntity<Set<Department>> findDepName() {

        Set<Department> depname = depService.findDepName();
        return ResponseEntity.ok(depname);
    }

DepartmentControllerTest

@RunWith(SpringJUnit4ClassRunner.class)
public class DepartmentControllerTest {

    private MockMvc mockMvc;

   @Mock
   public DepartmentService depService;  

   @InjectMocks
   DepartmentController departmentController;

   @Before
    public void setup() throws Exception    {
        mockMvc = MockMvcBuilders.standaloneSetup(departmentController).build(); 
    }
    @Test(timeout = 10000)
       public void findDepNameTest() throws Exception
       {
           Department dep = new Department();
           dep.setsDeptName("ABC");

           Set<Department> department = new  HashSet<Department>();
           department.add(dep);

           Mockito.when(depService.findDepName()).thenReturn(department);

        mockMvc.perform(get("/api.spacestudy.com/SpaceStudy/LoadDept").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$[0].sDeptName" , is("abc")));


       }

    }

Failure Trace

java.lang.AssertionError: No value at JSON path "$[0].sDeptName", exception: json can not be null or empty
    at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:245)
    at org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java:73)
    at org.springframework.test.web.servlet.result.JsonPathResultMatchers$1.match(JsonPathResultMatchers.java:87)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
    at com.spacestudy.DepartmentControllerTest.findDepNameTest(DepartmentControllerTest.java:76)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 

Solution

  • I found my mistake. I am giving wrong path for get Request in above code. I changed that path and its working properly.

    mockMvc.perform(get("/api.spacestudy.com/SpaceStudy/Control/SearchFilter/loadDepartmentsLoadDept").accept(MediaType.APPLICATION_JSON))