当前位置: 首页 > 知识库问答 >
问题:

Junit5 Mockito@injecctmocks不使用MockMvc

酆耀
2023-03-14
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class AuthControllerTest {

    private MockMvc mockMvc;

    @InjectMocks
    private AuthController authController;

    @BeforeEach
    void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(authController)
                .build();
    }

    @Test
    void getToken() throws Exception{
        mockMvc.perform(post("/auth/token")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"username\" : \"Santa Clause\", \"password\" : \"1223\" }")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.status").value("Success"))
                .andExpect(jsonPath("$.result").exists())
                .andExpect(jsonPath("$.result.username").exists())
                .andExpect(jsonPath("$.result.token").exists())
                .andDo(print());
    }
}
@RestController
@RequestMapping("/auth")
public class AuthController extends ContextService {

    private static final Logger logger = LoggerFactory.getLogger(AuthController.class);

    @Autowired
    IAuthManagement authManagement;

    @PostMapping("/token")
    public ResponseEntity getToken(@RequestBody AuthenticationDTO data) throws UserException {
        logger.info("\nCreating a new Token for user from credentials passed. *** "+data.getUsername()+"-->"+data.getPassword()+"-->"+authManagement);
        return authManagement.getToken(data);
    }

输出:

Creating a new Token for user from credentials passed. *** Santa Clause-->1223-->null
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

@InjectMocks没有注入任何内容,因为authManagement为null,因此出现了NullPointerException。有谁能帮我解决这个问题吗。

共有1个答案

安毅
2023-03-14

您需要模拟iauthmanagement;authmanagement;

在您的测试类中添加如下内容。

@Mock
IAuthManagement authManagement;

除此之外,你还得嘲笑你的服务方法。https://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/

 类似资料:
  • 问题内容: 此页面- http://labs.qt.nokia.com/2011/10/28/rpath-and- runpath/ -说,大约为了在ld.so库搜索: 然后建议: 运送二进制文件时,请使用RPATH而不是RUNPATH或确保在运行它们之前已设置LD_LIBRARY_PATH。 那么,with的使用是不好的,因为kind- of会取消,因此间接动态加载无法按预期工作?但是,为什么然

  • 正是标题所说的。有没有办法在不安装TCL的情况下使用matplotlib库?请不要告诉我咬紧牙关安装TCL——我知道怎么做,但出于我自己(好吧,也许很愚蠢)的原因,我不想这么做。 我不关心显示的图,我只希望能够输出他们在png。我尝试了各种各样的东西(使用不同的后端等),但是matplotlib总是想找到tcl来工作:(为什么TCL对matplotlib如此重要? 此外,请注意,我正在使用wind

  • 当登录失败时,我试图重定向登录页面上输入的用户名,但在我的控制器中,从“@modelattribute(”user“)”检索的用户的用户名为空。当我不使用spring security时,这是有效的。 我假设form实际上首先发送到spring security,然后重定向到控制器,因此在spring security之间输入的信息丢失。 编辑(解决方案): 谢谢。@James创建一个failur

  • 我在windows服务器上安装了imagemagick,当我尝试使用CMD时,它成功地转换了文件,但当我在php中使用以下代码时:- 它给出了以下错误:- ImagickException:无法打开图像“弧”。pdf“:没有此类文件或目录@错误/blob。c:\wamp\www\test\test中的c/OpenBlob/2638。php第10行 我也试过了 然后给出:- ImagickExcep

  • 我试图使用Hibernate的logback,似乎很容易,但我不能得到它的工作 hibernate.cfg.xml logback.xml 控制台输出 4.aziendagru2.aziendagru2.aziendagru2.id.aziendagru2.id.aziendagru2.id.id.azienda作为一个gruppo作为一个id1作为一个id1作为一个id1作为一个id1作为一个i

  • 我目前正在尝试训练一个聊天机器人,更具体地说是这个。但是,当我开始训练聊天机器人时,它使用了我100%的CPU和大约10%的GPU。有人知道为什么吗。 我已经安装了,并确保我有正确的CUDA和cuDNN版本。我还确保我没有安装基本的pip包。我的GPU也有最新的英伟达驱动程序。我也尝试过卸载和重新安装我所有的驱动程序,CUDA,cuDNN,tensorflow gpu和它所有的依赖和python本