亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

環境 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 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號