现在,我在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属性,而不是从主应用程序中提取?
谢谢,彼得
嗯,这实际上取决于您试图构建什么,如果它是某种控制器的单元测试,或者更有可能是集成测试。这两种方法都将在本教程中解释。
如果您试图编写集成测试,从您的问题来看,这似乎更有可能,那么@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() {
//
}
// ...
}
有几件重要的事情。
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上的文档,并且可以