当前位置: 首页 > 知识库问答 >
问题:

值注释在Junit测试中不起作用

苏嘉志
2023-03-14
@SpringBootTest
public class RuleControllerTest {

@Value("${myUrl}")
private String myUrl;
private HttpClient httpClient = HttpClients.createDefault();

@Test
public void loadAllRules() throws IOException, URISyntaxException {
    String target = myUrl + "/v2/rules";
    String json = generateHTTPget(target);

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Rule[] rules = objectMapper.readValue(json, Rule[].class);

    boolean correctResponse = rules != null ? true : false;
    int httpCode = getHTTPcode(target);
    boolean correctStatus = httpCode >= 200 && httpCode <= 300 ? true : false;

    assertTrue(correctStatus);
    assertTrue(correctResponse);
}
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>

并添加注释

@RunWith(SpringRunner.class)

我得到一条消息:没有测试找到test runner JUnit5,并且在Problems选项卡中有SpringBootTest.jar无法读取或者不是有效的ZIP文件

也试过

@PropertySource("classpath:application.properties")

我也试过:

@RunWith(SpringJUnit4ClassRunner.class)

如果我将字符串myUrl硬编码为“http://localhost:8090”,则测试工作正常,因此问题在于@value不工作

共有1个答案

殷建弼
2023-03-14

跟踪对我有用。它从application.properties文件中获取值。

@RunWith(SpringRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
public class ValueAnnotationTest {

    @Value("${myUrl}")
    private String myUrl;

    @Test
    public void test1() throws Exception {
    assertThat(myUrl).isEqualTo("http://test.com");
    }
}

来自Spring Boot文档:

单独使用ConfigFileApplicationContextInitializer不能提供对@value(“${…}”)注入的支持。它的唯一工作是确保application.properties文件被加载到Spring的环境中。对于@value支持,您需要另外配置一个PropertySourcesPlaceHolderConfigureer或使用@SpringBootTest,它会自动为您配置一个。

 类似资料:
  • 问题内容: 我有以下测试: 但是JUnit报告说,测试失败了,尽管它按预期方式抛出。 我是否需要配置其他东西才能运行此程序? 我现在用 当我删除前缀时,仍然出现错误。 我得说我是在Eclipse上运行这些测试,但它配置为使用JUnit 4 Runner。 问题答案: 问题是,嵌套测试的类是的扩展。由于这是JUnit 3样式,因此注释不起作用。 现在,我的测试班是一个单独的班。

  • 我有3个测试类如下: 包裹通讯。朱尼特。测试用例; Test3类: Test2类: Test1类: 和一个TestSuite类: 问题是它在从eclipse从JUnit运行TestSuite1类时忽略了Test3类中的@规则标签,因此输出不如预期。为什么它忽略了@规则标签。有没有其他选择来执行所有三种情况?

  • 我尝试使用SmtpAuthenticator创建邮件服务。组件已正确启动,但用户名和密码字段中存在空值。为什么会这样?

  • 我想在测试中注入DeMorgenArticleScraper。 DeMorgenArticleScraper组件本身进行了一些配置,但IDE/编译器并没有抱怨它们。 用@Qualifier注释的构造函数参数在Config.class中使用@Bean定义。类本身有@Configuration。我想问题不在这里。 IDE已经警告我,找不到bean。。。必须在bean中定义自动连线成员。但据我所知,它是

  • 我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?