Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Spring boot application-test.properties未在测试组件内初始化_Unit Testing_Spring Boot_Application.properties - Fatal编程技术网

Unit testing Spring boot application-test.properties未在测试组件内初始化

Unit testing Spring boot application-test.properties未在测试组件内初始化,unit-testing,spring-boot,application.properties,Unit Testing,Spring Boot,Application.properties,我正在为一个从application.properties获取值的组件编写一个测试 在测试本身中,从application-test.properties中正确提取值。 我使用了@TestPropertySourcelocations=classpath:application-test.properties 然而,在被测试的类中,这些值没有被提取出来,并且是空的 测试: @RunWith(SpringJUnit4ClassRunner.class) @TestPropertySource(lo

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

在测试本身中,从application-test.properties中正确提取值。 我使用了@TestPropertySourcelocations=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正确地测试此问题

您的安装方法正在创建ArtifactAssociationService的实例。这意味着它不是Springbean,因此没有执行任何依赖项注入。这包括注入到用@Value注释的字段中


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

我最初不是在setup方法中创建实例的,而是为了将restCilent设置为mock实例。即使删除了初始化,仍然是相同的值为空:@Spy InjectMocks private ArtifactAssociationService associationService;在public void安装程序抛出IOException{MockitoAnnotations.initMocksthis;//associationService=Mockito.spynew ArtifactAssociationServicebuilder;associationService.SetRestClientRestClientClientMock;}之前,很难读取注释中的代码,但看起来您仍在自己创建ArtifactAssociationService:new ArtifactAssociationService Builder。很抱歉,我无法将其添加为代码块。。这一行被注释掉了