我在src/test/resources/application.yml
下有一个测试属性文件。但是我无法在单元测试中加载这些值。我有以下课程:
@ConfigurationProperties("snmp")
open class snmpProperties {
var port: Int = 1611
lateinit var protocol: String
lateinit var host: String
override fun toString(): String {
return "snmpProperties(port=$port,protocol='$protocol',host='$host')"
}
}
在生产代码中加载/src/main/resources/application.yml
中的值。
snmp:
port: 1161
protocol: udp
host: 0.0.0.0
单元测试班:
@CamelSpringBootTest
@SpringBootApplication
@EnableAutoConfiguration
open class snmpRouteTest : CamelTestSupport() {
@Autowired
lateinit var snmpProperties: snmpProperties
@Mock
lateinit var repository: IPduEventRepository
@InjectMocks
lateinit var snmpTrapRoute: snmpTrapRoute
@Before
fun setup() {
initMocks(this)
}
我尝试向每个test
文件中添加一个application.yml
配置文件,以查看添加@activeProfiles("test")
是否有效,但是没有成功。
src / main / resources / application.yml& src / test / resources / application.yml
# Test profile
spring:
profiles: test
snmp:
port: 1161
protocol: udp
host: 0.0.0.0
我还创建了一个TestConfiguration类,该类创建了snmpProperties
bean,并使用@EnableConfigurationProperties(TestConfiguration::class)
将其自动连接到测试类中:
@Configuration
@EnableConfigurationProperties(snmpProperties::class)
open class TestConfiguration {
@Bean
open fun snmpProperties() = snmpProperties()
}
再次,不行。我得到的错误是:
Cannot instantiate @InjectMocks field named 'snmpTrapRoute' of type 'class org.meanwhile.in.hell.camel.snmp.receiver.route.snmpRoute'.
You haven't provided the instance at field declaration so I tried to construct the instance.
However the constructor or the initialization block threw an exception : Parameter specified as non-null is null: method org.meanwhile.in.hell.camel.snmp.receiver.route.snmpTrapRoute.<init>,parameter snmpProperties