Created
June 20, 2014 20:18
-
-
Save jeffsheets/ada3de8fe4a536e5351b to your computer and use it in GitHub Desktop.
Spock test with Mocks of Spring MVC Rest Controller using standaloneSetup and mockMvc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.json.JsonSlurper | |
import org.springframework.test.web.servlet.MockMvc | |
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.* | |
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; | |
import static org.springframework.http.HttpStatus.* | |
import spock.lang.Specification | |
/** | |
* A Spock Spring MVC Rest unit test that doesn't require a full spring context | |
*/ | |
class AccountControllerTest extends Specification { | |
def accountController = new AccountController() | |
def securityService = Mock(SecurityService) | |
//The magic happens here | |
MockMvc mockMvc = standaloneSetup(accountController).build() | |
def setup() { | |
accountController.securityService = securityService | |
} | |
def "getAccount test hits the URL and parses JSON output"() { | |
when: 'rest account url is hit' | |
def response = mockMvc.perform(get('/rest/account')).andReturn().response | |
def content = new JsonSlurper().parseText(response.contentAsString) | |
then: 'securityService correctly returned account in JSON' | |
1 * securityService.getCurrentLogin() >> 'spockUser' | |
//Testing the HTTP Status code | |
response.status == OK.value() | |
//Showing how a contains test could work | |
response.contentType.contains('application/json') | |
response.contentType == 'application/json;charset=UTF-8' | |
//Can test the whole content string that is returned | |
response.contentAsString == '{"username":"spockUser"}' | |
//Or can use the JsonSlurper version to test the JSON as object | |
content.username == 'spockUser' | |
} | |
def "simple getAccount test without spring mvc json framework"() { | |
when: 'getAccount is called' | |
def result = accountController.getAccount() | |
then: 'securityService correctly returns account' | |
1 * securityService.getCurrentLogin() >> 'spockUser' | |
result.username == 'spockUser' | |
} | |
} |
I did figure it out. It was not a request parameter we were using, just confusingly handling authentication.
Now I am battling IntelliJ and its autocomplete. I can't get my code to behave when using JSON-slurper...
Code compiles, test runs and passes, but IDE doesn't understand content.response.results[0].last4 == 1234
Seems not to know what the methods are.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Jason-Terry unfortunately i don't have access to this project anymore, so i won't be able to easily try it out... In theory what you have here should work, so I don't know why it isn't working off the top of my head