2016-07-26 211 views
0

我有一些問題,檢查JSON結果測試春季啓動REST JSON結果

UserControllerTest類

package com.serwis.controller; 

import com.serwis.PraktykiApplication; 
import com.serwis.model.User; 
import com.serwis.repository.UserRepository; 
import org.hamcrest.Matchers; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mockito; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.SpringApplicationConfiguration; 
import org.springframework.boot.test.TestRestTemplate; 
import org.springframework.boot.test.WebIntegrationTest; 
import org.springframework.http.HttpStatus; 
import org.springframework.http.MediaType; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.web.servlet.MockMvc; 
import org.springframework.web.client.RestTemplate; 

import static org.hamcrest.Matchers.is; 
import static org.junit.Assert.*; 
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; 
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; 



@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(PraktykiApplication.class) 
@WebIntegrationTest 
public class UserControllerTests { 

    @Autowired 
    private UserRepository userRepository; 

    User user; 

    private MockMvc mockMvc; 

    @Before 
    public void setUp(){ 
     user = new User("login1","password","email"); 
     userRepository.deleteAll(); 
     userRepository.save(user); 

     this.mockMvc = standaloneSetup(new UserController()).build(); 
    } 

    @Test 
    public void createUser() throws Exception { 
     this.mockMvc.perform(get("/user/findall/").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) 
       .andExpect(status().isOk()) 
       .andExpect(content().contentType("application/json;charset=UTF-8")) 
       .andExpect(jsonPath("$.login", is("login1"))); 
     System.out.println(userRepository.findAll()); 
    } 



} 

User類

package com.serwis.model; 


import javax.persistence.*; 

import java.util.Arrays; 
import java.util.Set; 


@Entity 
@Table(name="User") 
public class User { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name="id") 
    private long id; 

    @Column(name="login") 
    private String login; 

    @Column(name="password") 
    private String password; 

    @Column(name="email") 
    private String email; 

    @Column(name="avatar") 
    private byte[] avatar; 


    public User(){} 

    public User(String login, String password, String email) { 
     this.login = login; 
     this.password = password; 
     this.email = email; 
    } 

    @Override 
    public String toString() { 
     return "User{" + 
       "id=" + id + 
       ", login='" + login + '\'' + 
       ", password='" + password + '\'' + 
       ", email='" + email + '\'' + 
       ", avatar=" + Arrays.toString(avatar) + 
       '}'; 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public byte[] getAvatar() { 
     return avatar; 
    } 

    public void setAvatar(byte[] avatar) { 
     this.avatar = avatar; 
    } 


} 

UserRepository類

package com.serwis.repository; 

import com.serwis.model.User; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.transaction.annotation.Transactional; 


@Transactional 
public interface UserRepository extends CrudRepository<User, Long>{ 
} 

用戶Controller類

package com.serwis.controller; 

import com.serwis.model.User; 
import com.serwis.repository.UserRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

/** 
* Created by Jodanpotasu on 2016-07-24. 
*/ 
@Controller 
public class UserController { 

    @Autowired 
    private UserRepository userRepository; 


    @RequestMapping("/user/create") 
    @ResponseBody 
    public String create(String email, String login, String password) { 
     String userId = ""; 
     try { 
      User user = new User(email, login, password); 
      userRepository.save(user); 
      userId = String.valueOf(user.getId()); 
     } catch (Exception ex) { 
      return "Error creating the user: " + ex.toString(); 
     } 
     return "User succesfully created with id = " + userId; 
    } 

    @RequestMapping("/user/findall/") 
    @ResponseBody 
    public Iterable<User> findAll() { 
     return userRepository.findAll(); 
    } 

    @RequestMapping("/user/delete") 
    @ResponseBody 
    public String delete(long id) { 
     User deleted = userRepository.findOne(id); 
     userRepository.delete(id); 
     return "USER DELETED: " + deleted; 
    } 

    @RequestMapping("/user/update") 
    @ResponseBody 
    public String update(long id, String login, String password, String email) { 
     User beforeUpdate = userRepository.findOne(id); 

     User afterUpdate = userRepository.findOne(id); 
     afterUpdate.setLogin(login); 
     afterUpdate.setEmail(email); 
     afterUpdate.setPassword(password); 
     return "BEFORE UPDATE: \n" + beforeUpdate + " <br> AFTER UPDATE: " + afterUpdate; 
    } 
} 

應該像

[{ 「ID」:1, 「登錄」: 「login1」, 「密碼」: 「密碼」, 「電子郵件」: 「電子郵件」 「阿凡達」:空}]

但我仍然有錯誤輸出

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 

,這是完整的輸出

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 

    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
    at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) 
    at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) 
    at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155) 
    at com.serwis.controller.UserControllerTests.createUser(UserControllerTests.java:56) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:253) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.NullPointerException 
    at com.serwis.controller.UserController.findAll(UserController.java:37) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 
    ... 43 more 

Spring引導版本:1.3.6是否有另一種更好的方法來測試json?

+0

通過與調試步驟,找出究竟是什麼扔NPE以獲得更多幫助。 – UserF40

+0

可以包含完整的堆棧跟蹤嗎?和測試類.. – geneqew

+0

看起來像你的UserRepository沒有正確注入(第37行NPE)請張貼您的測試類 – geneqew

回答

0

這裏是我的工人階級

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(PraktykiApplication.class) 
@WebIntegrationTest 
public class UserControllerTests { 

    @Autowired 
    private UserRepository userRepository; 

    User user; 

    private MockMvc mockMvc; 

    @Autowired 
    UserController userController; 

    @Before 
    public void setUp(){ 
     user = new User("login1","password","email"); 
     userRepository.deleteAll(); 
     userRepository.save(user); 

     this.mockMvc = standaloneSetup(userController).build(); 
    } 

    @Test 
    public void createUser() throws Exception { 
     this.mockMvc.perform(get("/user/findall/").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) 
       .andExpect(status().isOk()) 
       .andExpect(content().contentType("application/json;charset=UTF-8")) 
       .andExpect(jsonPath("$[0].login", is("login1"))); 
     System.out.println(userRepository.findAll()); 
    } 
} 

似乎春天開機沒看到

this.mockMvc = standaloneSetup(new UserController()).build();