jeudi 11 août 2016

Unable to Inject Service in Controller Spock based test

I am trying to create test for my Spring boot Controllers ,below is my code. This code works fine , when controllers don't have any services . but if I call a controller that have services injected in them, I gives me null in response.

So, `

        Controller test(without Service)---> Response 200 response OK
        Controller test(with Service)---> Response 200 response null
        Testing tool:Spock
        FrameWork:Spring boot

Below is my code

import com.oodlestechnologies.blog.controllers.test.TestController
import com.oodlestechnologies.blog.services.employee.EmployeeService
import groovy.json.JsonSlurper
import org.springframework.boot.test.SpringApplicationContextLoader
import org.springframework.test.context.ContextConfiguration
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.MockMvcBuilder
import org.springframework.test.web.servlet.setup.MockMvcBuilders
import spock.lang.Specification
import spock.lang.Subject

import static org.springframework.http.HttpStatus.*
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup

class EmployeeControllerSpec extends  Specification{

def employeeService = Mock(EmployeeService)
def employeeController = new EmployeeController(employeeService: employeeService)

// Mock MVC
  MockMvc  mockMvc  =      MockMvcBuilders.standaloneSetup(employeeController).build()


def setup(){
    println("Controller: "+employeeController)
    println("Service: "+employeeService+"----")
   employeeController.employeeService = employeeService;
    println("Controller: "+employeeController+"----")

}
def "get Employee in json format when passed with employeeID"(){

    when:"url is hit"
    println(mockMvc)
    def response = mockMvc.perform(get("/api/v1/employee/60").contentType("application/json")).andReturn().response
    println(" Status: "+response.getStatus());
    println(" Content: "+response.contentAsString);
    then:"result return from employee controller"

    }
}

Output:

  Status: 200
  Content: 

`for simplycity i am just checking response

Aucun commentaire:

Enregistrer un commentaire