spring-boot 单元测试获取应用程序属性
Posted
技术标签:
【中文标题】spring-boot 单元测试获取应用程序属性【英文标题】:spring-boot unit testing get application properties 【发布时间】:2019-01-24 07:55:45 【问题描述】:我是 spring-boot 新手,目前正在尝试开发一个 kafka 生产者 我想测试使用属性文件中定义的值的方法。但它显示值为 null 如何解决这个问题。我已将我的属性文件添加到测试文件夹中的单独资源文件中 this is my folder structure
@SpringBootTest
public class KafkaProducerImplTest
@BeforeEach
void setUp()
@Test
void check()
KafkaProducerImpl kpi = new KafkaProducerImpl();
kpi.check();
@Service
public class KafkaProducerImpl implements KafkaProducerInterface
@Value("$kafka.brokers.local")
private String kafkaBrokers;
@Value("$schema-registry")
private String schemaRegistry;
private Properties config()
Properties props = new Properties();
props.setProperty("bootstrap.servers",kafkaBrokers);
props.setProperty("acks", "1");
props.setProperty("reties", "10");
props.setProperty("key.serializer", StringSerializer.class.getName());
props.setProperty("value.serializer",Serializer.class.getName());
props.setProperty("schema.registry.url",schemaRegistry);
return props;
public <K,T>KafkaProducer<K,T> getProducer()
return new KafkaProducer<>(config());
public <T>ProducerRecord createRecord(String Topic,T msg)
return new ProducerRecord<>(
Topic,msg
);
public void sendMessage(KafkaProducer producer,ProducerRecord record)
producer.send(record, (recordMetadata, e) ->
if (e == null)
System.out.println("success");
);
producer.flush();
public void closeProducer(KafkaProducer producer)
producer.close();
public void check()
System.out.println(schemaRegistry);
【问题讨论】:
您正在自己创建一个新实例,而不是让 Spring 管理的KafkaProducerImpl
实例。
好的,我怎样才能使用 spring 托管实例。因为当我尝试通过 @Autowired 获取实例时,它给出了错误
您应该自动连接 KafkaProducerInterface
而不是 Impl
并且您的测试需要 @RunWith(SpringRunner.class)
。
【参考方案1】:
终于找到方法了,谢谢大家帮助我。
@RunWith(SpringRunner.class)
@SpringBootTest
public class KafkaProducerImplTest
@Autowired
private KafkaProducerInterface kpi;
@Test
public void check()
kpi.check();
【讨论】:
与我发布的答案没有什么不同。 :)【参考方案2】:使用@RunWith(SpringRunner.class) 注释您的测试类,它将为您加载应用程序上下文并实例化spring bean。要添加 Spring Boot 支持,请添加 @SpringBootTest(您已经拥有)。
您必须删除此行
"KafkaProducerImpl kpi = new KafkaProducerImpl();"
并使用接口引用自动装配。像这样的:
@Autowired
KafkaProducerInterface kpi;
我假设您在测试属性文件中定义了此处使用的属性(例如“kafka.brokers.local”)。
【讨论】:
我已经按照你说的那样更改了我的代码,java.lang.NullPointerException以上是关于spring-boot 单元测试获取应用程序属性的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Boot 单元测试:ConstraintValidator 中的@Value
rest-assured : Restful API 测试利器 - 真正的黑盒单元测试(跟Spring-Boot更配哦)