Forked from jeffsheets/AccountControllerTest.groovy
Created
December 1, 2017 20:32
-
-
Save lospejos/2ac21621a4ab8b238b2c90de11742af5 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 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' | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment