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

在Autowired服务类中测试REST API时,如何用testing Application.yml覆盖main Application.yml?

梅欣然
2023-03-14

现在,我在src/test/resources/application.yml中也有source.storage属性,该属性指向src/test中的另一个目录,在该目录中存储测试XML文件,并再次使用@value注释将它们导入到测试类中。我的测试使用HTTP GET调用RESTendpoint。但是,服务似乎仍然将source.storage属性绘制为main application.yml,而我希望该值被test application.yml文件中的值覆盖。换句话说,服务尝试从应用程序存储目录导入XML文件,而不是从我的测试存储中导入。

@ActiveProfiles和@TestPropertySource似乎对我不起作用。扫描main application.yml的存储属性不是一个选项,因为最终application.yml将从Spring Cloud配置中提取,我不知道main application.yml将位于何处。

有没有一种方法可以让@autowired服务从测试应用程序中提取source.storage属性,而不是从主应用程序中提取?

谢谢,彼得

共有1个答案

经正祥
2023-03-14

嗯,这实际上取决于您试图构建什么,如果它是某种控制器的单元测试,或者更有可能是集成测试。这两种方法都将在本教程中解释。

如果您试图编写集成测试,从您的问题来看,这似乎更有可能,那么@ActiveProfiles@TestPropertySource应该适合您。我建议使用概要文件,在具有大量属性的增长应用程序中,只替换一些属性进行测试会更方便一些。下面是我在为控制器endpoint编写集成测试时使用的设置:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class AreaControllerTest {

    @Autowired
    TestRestTemplate rest;

    @MockBean
    private JobExecutor jobExecutor;


    @Test
    public void test01_List() {
        //
    }

    @Test
    public void test02_Get() {
        //
    }
    
    // ...
}

有几件重要的事情。

    null
java prettyprint-override">@RunWith(SpringRunner.class)
@WebMvcTest(GreetingController.class)
public class WebMockTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private GreetingService service;

    @Test
    public void greetingShouldReturnMessageFromService() throws Exception {
        when(service.greet()).thenReturn("Hello Mock");
        this.mockMvc.perform(get("/greeting")).andDo(print()).andExpect(status().isOk())
                .andExpect(content().string(containsString("Hello Mock")));
    }
}
 类似资料:
  • 在我的服务类中,我有@Autowired HttpServletRequest,并且在我的服务方法中使用相同的对象,但是对于那个服务方法测试类,我不能在我的测试方法中模拟HttpServletRequest对象,请检查下面的代码。我正在获取请求对象的空指针异常

  • 我已经读了这些问题,但没有一个有效: Spring boot MVC -无法自动连接服务类中的存储库 为什么不能@Autowired a JPA存储库-Spring boot JPA JpaRepository在服务类中获取Null 还有这个:https://www.baeldung.com/spring-autowired-field-null 不幸的是,它们都不起作用。 我拥有的是: 服务接口

  • 问题内容: 我对大多数代码都有单元测试。但是我无法弄清楚如何为main包中的main()中的某些代码生成单元测试覆盖率。 主要功能非常简单。它基本上是一个选择块。它读取标志,然后调用另一个函数/执行某些操作,或仅在屏幕上打印帮助。但是,如果命令行选项设置不正确,它将退出并显示各种错误代码。因此,需要进行子过程测试。 我尝试了子流程测试技术,但修改了代码,以使其包括覆盖率标志: 这是原始代码: ht

  • 11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法

  • 我有base/config/services。yaml在我的Symfony 4.3项目中存储了许多服务。例如: 对于我的测试目的,我有配置/测试/test_services.yaml,其中存储带有前缀的服务,以测试私有服务,使它们在test env中公开。 服务之一,在test_服务中声明。yaml没有前缀。它的名称(FQCN)与服务中定义的另一个名称相同。亚马尔。它们具有相同类型的不同构造函数参

  • 我试图通过SonarQube API(Sonar Version4.1.2)检索单个类的单元测试代码覆盖率。一切都很好,当我直接进入声纳仪表板并进入一个类的覆盖选项卡时,我可以看到指标良好: 有人能告诉我通过声纳API接口检索相同/相似信息的正确调用吗?我已经查看了http://docs.sonarqube.org/display/sonar/metric+definitions上的文档,并且可以