一、需求

  1、项目中对某些IP地址和端口做了限制,只有写在配置文件的内容(ip)才可以访问项目。

  2、在进行测试案例运行时保证读取配置文件中ip和port的类(CbeConfig)得提前运行。

二、工作

  1、如下的测试时肯定不行

    @Test
    public void getCbeTest(){
        CbeConfig cbeConfig = new CbeConfig();
        System.out.println("IP是" + cbeConfig.getIp());
        System.out.println("Port是" + cbeConfig.port);
    }

  2、保证CbeConfig类在程序运行起来的那一刻先存在,先写一个读取配置的类,程序运行起来后读取到配置后,然后再将读取的参数设置到另一个类(CbeConfigAfter)中,以后提取参数。都使用CbeConfigAfter。

  CbeConfigBefore类实现ApplicationRunner接口的run方法

package com.example.demo;

import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component

public class CbeConfigBefore implements ApplicationRunner {

    @Value("${cbe.ip}")
    public  String ip;


    @Value("${cbe.port}")
    public  Integer port;

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        System.out.println("我第一个启动");
        System.out.println("哈哈ip" + ip);
        System.out.println("哈哈port" + port);
        CbeConfigAfter cbeConfigAfter = CbeConfigAfter.getInstance();
        cbeConfigAfter.setIp(ip);
        cbeConfigAfter.setPort(port);
        System.out.println("设置完毕");
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

   CbeConfigAfter类写成单例模式

package com.example.demo;


import lombok.Getter;
import lombok.Setter;

public class CbeConfigAfter {

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    String ip;

    int port;

    private static CbeConfigAfter cbeConfigAfter;
    private CbeConfigAfter (){}
    public static synchronized CbeConfigAfter getInstance() {
        if (cbeConfigAfter == null) {
            cbeConfigAfter = new CbeConfigAfter();
        }
        return cbeConfigAfter;
    }
}

  测试类

package com.example.demo.controllerTest;

import com.example.demo.CbeConfigAfter;
import com.example.demo.CbeConfigBefore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class CbeTest {



    @Test
    public void getCbeByAfterTest(){
        CbeConfigAfter instance = CbeConfigAfter.getInstance();
        System.out.println("IP是" + instance.getIp());
        System.out.println("端口是" + instance.getPort());
    }

    @Test
    public void getCbeBeforeTest(){
        CbeConfigBefore cbeConfig = new CbeConfigBefore();
        System.out.println("IP是" + cbeConfig.getIp());
        System.out.println("Port是" + cbeConfig.port);
    }
}

  此时再运行getCbeByAfterTest测试类,OK,搞定。

虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。

  

02-13 20:18