我在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)
}
我试图为每个应用程序添加一个测试配置文件。yml文件,看看添加ActiveProfiles(“test”)是否有效,但没有。
src/main/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
@CamelSpringBootTest
@SpringBootTest(classes = [SnmpTrapReceiverCamelApplication::class])
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
@DisableJmx(false)
@ExtendWith(MockitoExtension::class)
@EnableAutoConfiguration
class SnmpTrapRouteTest {
object TestSnmpConstants {
const val SNMP_REAL_ENDPOINT_ID = "snmp-trap-route"
const val SNMP_DIRECT_REPLACEMENT_ENDPOINT = "direct:snmp-from"
const val TRAP_REQUEST_ID = 123456789
const val TRAP_OID = "1.2.3.4.5"
const val TRAP_PAYLOAD = "snmp-trap-payload"
}
@MockBean
lateinit var repository: IPduEventRepository
@Produce
lateinit var producerTemplate: ProducerTemplate
@Autowired
lateinit var camelContext: CamelContext
@Test
@Throws(Exception::class)
fun `Should call save method on the repository when PDU TRAP event supplied`() {
// Replace our SNMP consumer route with a dummy route than can be called from a producer internally.
// Since our snmp endpoint is an asynchronous consumer (meaning it only receives data from external events)
// we need to use the "direct:" component to allow a producer to internally call what is ordinarily an external
// event-driven endpoint. Otherwise we will get a Connection Refused error, as we cannot access the external
// system/socket.
AdviceWithRouteBuilder.adviceWith(camelContext, TestSnmpConstants.SNMP_REAL_ENDPOINT_ID) { routeBuilder ->
routeBuilder.replaceFromWith(TestSnmpConstants.SNMP_DIRECT_REPLACEMENT_ENDPOINT)
}
// Create the PDU object to send to the SNMP endpoint
val trap = PDU()
trap.type = PDU.TRAP
trap.requestID = Integer32(TestSnmpConstants.TRAP_REQUEST_ID)
trap.add(VariableBinding(OID(TestSnmpConstants.TRAP_OID), OctetString(TestSnmpConstants.TRAP_PAYLOAD)))
// "direct:" endpoints only send DefaultMessage objects. These are not castable to SnmpMessage objects,
// so need to overwrite the exchange IN message to be an SnmpMessage object
val exchange = DefaultExchange(camelContext)
exchange.setIn(SnmpMessage(camelContext, trap))
// ProducerTemplates need a default endpoint specified.
// The ProducerTemplate provides us with a producer that can directly deliver messages to consumers defined
// in the camelContext, using the "direct:" component (see above)
producerTemplate.setDefaultEndpointUri(TestSnmpConstants.SNMP_DIRECT_REPLACEMENT_ENDPOINT)
producerTemplate.send(exchange)
// Verify that the repository.save() was invoked
verify(repository, atLeast(1)).save(any())
}
}
看起来没有创建bean(因此出现空错误)。
尝试:
资料来源:https://www.baeldung.com/configuration-properties-in-spring-boot
确保检查您的项目结构。属性文件应该在类路径上,以便Spring Boot找到并使用它。例如Maven在此处定义的项目结构:https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
对于Maven,您的配置文件应放在以下目录中:
src/main/resources/application.yml
src/test/resources/application.yml
我做错了什么?我正在使用这个小型独立应用程序,它运行并查找我的。相同的配置在JUnit中不起作用,请参阅下面: 以下不起作用,中的相同属性未加载并且只有值:
我使用的是spring-boot-1.5。在单元测试期间,是否有方法在src/test/resources中加载application.properties?我知道如何使用integration test加载它,我们可以使用@SpringBootTest或@ContextConfiguration,但我想在单元测试期间使用Application.Properties。 任何指点或帮助都将是非常值得
主要内容:1. 项目依赖文件配置,2. @Test(invocationCount =?),3. @Test(invocationCount = ? threadPoolSize = ?),4. 负载测试示例在本教程中,我们将演示如何使用属性和在网站上执行负载测试或压力测试。 使用的工具 : TestNG 6.8.7 Selenium 2.39.0 Maven 3 我们使用库自动化浏览器来访问网站。创建一个用于测试的Maven项目:TestngSelenium 。 1. 项目依赖文件配置 获取T
我的客户机正在使用EventHub的HTTPendpoint发布事件,这实际上意味着当客户机希望发布事件时,它会向一个特殊的URL发送HTTPS POST请求,例如: 我可以很容易地从本地机器上加载测试这个服务(例如,使用Apache JMeter),但不幸的是,本地机器的资源有限,所以我不能生成很大的负载来测试我的服务。 我说大负荷是什么意思? 如果没有,我如何加载测试我的基于EventHub的
使用 Apache Ant 和 Apache JMeter 频繁进行负载测试 负载测试通常在开发周期的后期执行,但是并不一定要这样。在 让开发自动化的这一期,自动化专家 Paul Duvall 将向您描述如何创建一个运行 JMeter 测试的预订集成构建,发现和修复开发周期中出现的问题。 您的软件系统可供多少用户同时访问?在不引起性能下降的前提下可以加载多少数据?您的系统有多大的吞吐量需求?间隔多
我正在使用一个spring启动应用程序,它运行我的src/main/resources/config/application。yml。 当我通过以下方式运行测试用例时: 测试代码仍在运行我的应用程序。要加载属性的yml文件。我想知道是否有可能再运行一个*。运行测试用例时的yml文件。