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

Spring boot application-test.properties不在被测试组件内初始化

范飞翰
2023-03-14

我正在为一个从application.properties中获取值的组件编写测试。

在测试本身中,从application-test.properies中正确提取值。我使用了@testpropertysource(locations=“classpath:application-test.properties”)

然而,在测试的类中,这些值不会被拾取,并且是空值。

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations = "classpath:application-test.properties")
public class ArtifactAssociationHandlerTest {

private InputStream inputStreamMock;
private ArtifactEntity artifactMock;
private ArtifactDeliveriesRequestDto requestDto;
@Value("${sdc.be.endpoint}")
private String sdcBeEndpoint;
@Value("${sdc.be.protocol}")
private String sdcBeProtocol;
@Value("${sdc.be.external.user}")
private String sdcUser;
@Value("${sdc.be.external.password}")
private String sdcPassword;

@Mock
private RestTemplate restClientMock;

@Mock
private RestTemplateBuilder builder;

@InjectMocks
private ArtifactAssociationService associationService;

@Before
public void setUp() throws IOException {
    inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8");
    artifactMock = new ArtifactEntity(FILE_NAME, inputStreamMock);
    requestDto = new ArtifactDeliveriesRequestDto("POST",END_POINT);
    MockitoAnnotations.initMocks(this);
    associationService = Mockito.spy(new ArtifactAssociationService(builder));
    associationService.setRestClient(restClientMock);
}

测试的组件:

@Component("ArtifactAssociationHandler")
public class ArtifactAssociationService {

@Value("${sdc.be.endpoint}")
private String sdcBeEndpoint;
@Value("${sdc.be.protocol}")
private String sdcBeProtocol;
@Value("${sdc.be.external.user}")
private String sdcUser;
@Value("${sdc.be.external.password}")
private String sdcPassword;

private RestTemplate restClient;

@Autowired
public ArtifactAssociationService(RestTemplateBuilder builder) {
    this.restClient = builder.build();
}

 void setRestClient(RestTemplate restClient){
    this.restClient = restClient;
}

如何使用application-test.properties正确地测试它?

共有1个答案

袁博
2023-03-14

您的setup方法正在创建ArtifactAssociationService的实例。这意味着它不是一个Spring bean,因此不执行任何依赖项注入。这包括注入到用@value注释的字段中。

如果您希望@value-注释字段注入它们的值,您必须使ArtifactAssociationService实例成为bean,例如通过在@configuration类中使用@bean方法创建它。

 类似资料:
  • 我正在使用javaFX,我需要把自定义组件放到我的场景中。因此,我有“main_pane.fxml”,网格窗格包含我的组件(例如文档模块)。 它们都在单独的fxml文件中定义。 问题是DocumentModul在构建后没有初始化。它的构造函数被调用,但它的初始化(URL位置、资源包资源)方法没有被调用。因此fxml中的对象没有被注入。 } 对于MainPane,一切正常,但对于任何内部组件都不正常

  • 同步模式的读写测试,使用Simple Producer & Simple Consumer 备注: 1台客户机,8台Talos机器,8台Hdfs,8台HBase,Talos与Hdfs/HBase混布,机型均为2U; 读写同步,每个partition对应一个线程; ThroughPut指的是client出口/入口带宽; QPS是集群整体处理能力,非单台serverQPS 场景一:只写,batch=1

  • 我在阅读这个问题的时候发现了backtype.storm.testing并感到很兴奋,但我一直无法使它工作,因为当我实际运行测试(从Java)时,测试类不会加载。 我想使用XuMingMing的TestingApiDemo中展示的测试函数,但当我实际运行测试时,我得到了一个ExceptionInInitializerError和一堆NoClassDefFoundErrors,因为它无法初始化Bac

  • 很多组件的渲染输出由它的 props 决定。事实上,如果一个组件的渲染输出完全取决于它的 props,那么它会让测试变得简单,就好像断言不同参数的纯函数的返回值。看下面这个例子: <template> <p>{{ msg }}</p> </template> <script> export default { props: ['msg'] } </script> 你可以在

  • 我在这里遵循指南,https://spring.io/guides/gs/spring-boot/克隆了项目,用Gradle构建,并试图运行...应用程序运行良好。然后我根据我的要求更改了一些文件结构,并试图运行那里给出的单元测试用例,但得到这个错误- 找不到@SpringBootConfiguration,您需要使用@ContextConfiguration或@SpringBootTest(类=

  • Junit4中是否有方法将一些预初始化的数据(如http连接)传递给所有子(即套件)测试类,这些数据是使用带有“@RunWith(Suite.class)”注释的类中的“@ClassRule”初始化的?还有,如何确保套件中的类不能单独运行? 例如 谢谢, 帕迪