gpt4 book ai didi

java - 如何在 MicronautTest 中设置 @Value?

转载 作者:行者123 更新时间:2023-12-01 16:43:56 24 4
gpt4 key购买 nike

我正在使用Micronaut作为开发 AWS Java Lambda 的框架。

Micronaut 支持 @Value对于阅读,嗯,“值(value)观”。

@io.micronaut.context.annotation.Factory
public class SomeFactory {
public SomeFactory(
@io.micronaut.context.annotation.Value("${NameOfValue}")
final String value) {
...
}
...
}

何时 testing ,我想将“NameOfValue”设置为特定值,我该怎么做?

@io.micronaut.test.annotation.MicronautTest
class SomeLambdaIT {

@org.junit.jupiter.api.Test
void aTest() {
// When this test runs, "NameOfValue" shall be set to a specific value
}
}

最佳答案

When testing, I want to set "NameOfValue" to a specific value, how can I do that?

您有多种选择。

一种选择是定义src/test/resources/application-test.yml并在那里定义配置设置。该文件只会在测试环境中加载,并且该文件中定义的任何设置都将取代 src/main/resources/application.yml 中定义的值。

如果您只想针对此特定测试使用特殊设置,则另一个可能有意义的选项是您可以执行类似的操作...

import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;


@MicronautTest(propertySources = "classpath:some-special-test-props.properties")
public class SomeTest {

@Test
void someTest() {
// ...
}
}

然后定义src/test/resources/some-special-test-props.properties并在那里赋值。

另一种选择是使用 @Property 标记您的测试:

import io.micronaut.context.annotation.Property;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;

@MicronautTest
@Property(name="some.config.value", value = "My Test Value")
public class SomeTest {


@Test
void someTest() {
// ...
}
}

希望对您有所帮助。

编辑

下面的评论包括“我确实尝试过,但 @Property 解决方案和 some-special-test-props.properties 在我的情况下都有效。”。我创建了一个示例应用程序来演示这些技术。查看该项目 https://github.com/jeffbrown/markusschultevalue .

https://github.com/jeffbrown/markusschultevalue/blob/8131e96492356180e2c7fade09603bd41f8c8829/src/main/java/markusschultevalue/SomeWidget.java

package markusschultevalue;

public class SomeWidget {
private final String name;

public SomeWidget(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

https://github.com/jeffbrown/markusschultevalue/blob/master/src/main/java/markusschultevalue/SomeFactory.java

package markusschultevalue;

import io.micronaut.context.annotation.Bean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Value;

@Factory
public class SomeFactory {

private final String name;

// there are better ways to do this but
// this is consistent with the code in the
// question being asked...
public SomeFactory(@Value("${some.config.value}") String name) {
this.name = name;
}

@Bean
public SomeWidget createWidget() {
return new SomeWidget(name);
}
}

https://github.com/jeffbrown/markusschultevalue/blob/8131e96492356180e2c7fade09603bd41f8c8829/src/test/java/markusschultevalue/PropertyAnnotationTest.java

package markusschultevalue;

import io.micronaut.context.annotation.Property;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;

import javax.inject.Inject;

import static org.junit.jupiter.api.Assertions.assertEquals;

@MicronautTest
@Property(name="some.config.value", value="Some Widget Name")
public class PropertyAnnotationTest {

@Inject
SomeWidget someWidget;

@Test
void testWidget() {
assertEquals("Some Widget Name", someWidget.getName());
}
}

https://github.com/jeffbrown/markusschultevalue/blob/8131e96492356180e2c7fade09603bd41f8c8829/src/test/java/markusschultevalue/ConfigFileTest.java

package markusschultevalue;

import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;

import javax.inject.Inject;

import static org.junit.jupiter.api.Assertions.assertEquals;

// This will load the config value
// from src/test/resources/some-widget-test-config.yml
@MicronautTest(propertySources = "classpath:some-widget-test-config.yml")
public class ConfigFileTest {

@Inject
SomeWidget someWidget;

@Test
void testWidget() {
assertEquals("Some Other Widget Name", someWidget.getName());
}
}

https://github.com/jeffbrown/markusschultevalue/blob/8131e96492356180e2c7fade09603bd41f8c8829/src/test/resources/some-widget-test-config.yml

some:
config:
value: Some Other Widget Name

请注意,在您的示例中,您使用 "${NameOfValue}" 引用配置变量。如果这实际上是您的配置变量的名称,请注意,在代码中您需要在有效的 kebab-case 中引用该变量,即 "${name-of-value}"

希望对您有所帮助。

关于java - 如何在 MicronautTest 中设置 @Value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56539052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com