Note that there are some explanatory texts on larger screens.

plurals
  1. POSpring REST Controller Test with spring-test-mvc framework
    primarykey
    data
    text
    <p>This question is next to the question I had asked <a href="https://stackoverflow.com/questions/9138555/spring-framework-test-restful-web-service-controller-offline-i-e-no-server-n">here</a>. I am using <strong>spring-test-mvc</strong> framework to test <strong>REST</strong> controller. Please see the above link to see my code for the REST Controller I have.</p> <p>My test for <strong>GET</strong> is working fine but I can't do a <strong>POST</strong>. I get an exception when I try do so. This is my first time testing a REST controller.</p> <p>Here's my PcUserControllerTest class</p> <pre><code>@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/applicationContextTest.xml") public class PcUserControllerTest { @Autowired PcUserService pcUserService; @Autowired PcUserController pcUserController; PcUser pcUser; private MockMvc mockMvc; @Before public void setUp() throws Exception { mockMvc = standaloneSetup(pcUserController).build(); pcUser = new PcUser("John", "Li", "Weasley", "john", "john"); pcUserService.create(pcUser); } @After public void tearDown() throws Exception { pcUserService.delete(pcUser.getId()); } @Test public void shouldGetPcUser() throws Exception { this.mockMvc.perform(get("/pcusers/" + pcUser.getId()).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); } @Test public void shouldCreatePcUser() throws Exception { PcUser newUser = new PcUser("Mike", "Li", "Donald", "mike", "mike"); this.mockMvc.perform(post("/pcusers/create/" + newUser).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); } } </code></pre> <p>Exception I get when I execute shouldCreatePcUser:</p> <pre><code>java.lang.IllegalArgumentException: Not enough variable values available to expand ["firstName"] at org.springframework.web.util.UriComponents$VarArgsTemplateVariables.getValue(UriComponents.java:1011) at org.springframework.web.util.UriComponents.expandUriComponent(UriComponents.java:443) at org.springframework.web.util.UriComponents.access$1(UriComponents.java:431) at org.springframework.web.util.UriComponents$FullPathComponent.expand(UriComponents.java:790) at org.springframework.web.util.UriComponents.expandInternal(UriComponents.java:413) at org.springframework.web.util.UriComponents.expand(UriComponents.java:404) at org.springframework.web.util.UriTemplate.expand(UriTemplate.java:121) at org.springframework.test.web.server.request.MockMvcRequestBuilders.expandUrl(MockMvcRequestBuilders.java:51) at org.springframework.test.web.server.request.MockMvcRequestBuilders.request(MockMvcRequestBuilders.java:45) at org.springframework.test.web.server.request.MockMvcRequestBuilders.post(MockMvcRequestBuilders.java:28) at com.project.cleaner.controller.test.PcUserControllerTest.shouldCreatePcUser(PcUserControllerTest.java:69) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) </code></pre> <p>My PcUser looks like </p> <pre><code>@Document public class PcUser extends BaseEntity { private String firstName; private String middleName; private String lastName; private String username; private String password; public PcUser() { super(); } public PcUser(String firstName, String middleName, String lastName, String username, String password) { super(); this.firstName = firstName; this.middleName = middleName; this.lastName = lastName; this.username = username; this.password = password; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getMiddleName() { return middleName; } public void setMiddleName(String middleName) { this.middleName = middleName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { // JSONObject jsonPcUser = new JSONObject(); // jsonPcUser.put("id", this.getId()); // jsonPcUser.put("firstName", this.firstName); // jsonPcUser.put("middleName", this.middleName); // jsonPcUser.put("lastName", this.lastName); // jsonPcUser.put("username", this.username); // // return jsonPcUser.toJSONString(); return "{\"firstName\":" + this.firstName + ", " + "\"middleName\":" + this.middleName + ", " + "\"lastName\":" + this.lastName + ", " + "\"username\":" + this.username + "}"; } } </code></pre> <p>BaseEntity:</p> <pre><code>public class BaseEntity { @Id private String id; public BaseEntity() { } public String getId() { return id; } public void setId(String id) { this.id = id; } } </code></pre> <p>I don't understand this exception. If anyone could guide me in the right direction would be really appreciated.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload