为了账号安全,请及时绑定邮箱和手机立即绑定

环境 getProperty("SomeValue") 值在 Spring 测试和 Mockito

环境 getProperty("SomeValue") 值在 Spring 测试和 Mockito

慕容708150 2022-11-30 10:10:03
我正在为控制器类编写 JUnit。我正在使用@PropertySource("classpath:webmvc_test.properties")和Environment反对从属性文件中读取值。在调用getProperty()方法获取null价值。属性文件webmvc_test.properties在类路径下。TestClass.java:package com.kalavakuri.webmvc.web.controller;import static org.mockito.Mockito.when;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;import java.util.ArrayList;import java.util.List;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.MockitoAnnotations;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.PropertySource;import org.springframework.core.env.Environment;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import com.kalavakuri.webmvc.business.service.FamilyService;import com.kalavakuri.webmvc.business.valueobject.FamilyAddress;import com.kalavakuri.webmvc.business.valueobject.FamilyVO;import com.kalavakuri.webmvc.init.ApplicationInitializer;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = { ApplicationInitializer.class })@PropertySource("classpath:webmvc_test.properties")public class WelcomeControllerTest {    @Mock    private FamilyService familyService;    @InjectMocks    private WelcomeController welcomeController;    @Autowired    private Environment environment;    private MockMvc mockMvc;    @Before    public void setup() {        MockitoAnnotations.initMocks(this);        this.mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build();    }    }}
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

我遇到了同样的问题,当我为它寻找解决方案时,我发现了这篇文章@Autowired + PowerMock:修复一些 Spring Framework 的误用/滥用似乎 powermock 和 spring 之间存在设计问题,无法@Autowire在测试类中正常工作, 所以不要使用@Autowireuse@Mock并期望返回值

package com.kalavakuri.webmvc.web.controller;


import static org.mockito.Mockito.when;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;


import java.util.ArrayList;

import java.util.List;


import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.mockito.InjectMocks;

import org.mockito.Mock;

import org.mockito.MockitoAnnotations;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.PropertySource;

import org.springframework.core.env.Environment;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.setup.MockMvcBuilders;


import com.kalavakuri.webmvc.business.service.FamilyService;

import com.kalavakuri.webmvc.business.valueobject.FamilyAddress;

import com.kalavakuri.webmvc.business.valueobject.FamilyVO;

import com.kalavakuri.webmvc.init.ApplicationInitializer;


@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = { ApplicationInitializer.class })

@PropertySource("classpath:webmvc_test.properties")

public class WelcomeControllerTest {


    @Mock

    private FamilyService familyService;


    @InjectMocks

    private WelcomeController welcomeController;


    @Mock

    private Environment environment;


    private MockMvc mockMvc;


    @Before

    public void setup() {

        MockitoAnnotations.initMocks(this);

        this.mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build();


        when(environment.getProperty("familyId")).thenReturn("1");

        when(environment.getProperty("familyMemberName")).thenReturn("Ramachandrappa Kalavakuri");

        when(environment.getProperty("familyMemberAge")).thenReturn("36");

        when(environment.getProperty("familyAddress")).thenReturn("Flat no: 305, 2nd Floor, Prakasa Pride Apartments, Opp To J.P.Morgan, Kadubesinahalli, Bangalore - 560087"); 

    }


    @Test

    public void welcomePage() throws Exception {


        FamilyVO allFamilyMembers = getAllFamilyMembers();


        when(familyService.getAllFamilyMembers()).thenReturn(allFamilyMembers);

        mockMvc.perform(get("/")).andExpect(status().isOk()).andExpect(view().name("Index"));

    }


    /**

     * @return

     */

    private FamilyVO getAllFamilyMembers() {

        FamilyVO allFamilyMembers = new FamilyVO();

        FamilyVO familyVO = new FamilyVO();

        familyVO.setFamilyId(Integer.parseInt(environment.getProperty("familyId")));

        familyVO.setFamilyMemberName(environment.getProperty("familyMemberName"));

        familyVO.setFamilyMemberAge(Integer.parseInt(environment.getProperty("familyMemberAge")));


        FamilyAddress familyAddress = new FamilyAddress();

        familyAddress.setAddress(environment.getProperty("familyAddress"));

        familyVO.setFamilyAddress(familyAddress);


        List<FamilyVO> familyVOs = new ArrayList<FamilyVO>();

        familyVOs.add(familyVO);


        allFamilyMembers.setFamilyVOs(familyVOs);

        return allFamilyMembers;

    }

}


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信