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

无法在JUnit 5中使用@value获取属性值

墨安阳
2023-03-14
@Value("${transaction.service.process.layer.url}")
private String processLayerUrl;

public ResponseEntity<Object> getTransactionDataListByAccount(Transaction transaction) {
    ResponseEntity<Object> transactionHistoryResponse = restTemplate.postForEntity(processLayerUrl, transaction, Object.class);        
    return new ResponseEntity<>(transactionHistoryResponse.getBody(), HttpStatus.OK);
}
@RunWith(SpringRunner.class)
@WebMvcTest(value = TransactionServiceImpl.class)
@ActiveProfiles(profiles = "test")
@ContextConfiguration
//@ContextConfiguration(classes = TransactionServiceExperienceApplication.class)
//@SpringBootConfiguration(classes = { TransactionServiceExperienceApplicationTests.class })
//@TestPropertySource(locations="classpath:application-test.properties")
//@SpringBootTest(properties = { "transaction.service.process.layer.url =http://localhost:8087/v1/transaction-process-service" })
//@TestPropertySource(properties = { "transaction.service.process.layer.url = http://localhost:8087/v1/transaction-process-service" })
public class TransactionServiceImplTest {

    @Mock 
    private RestTemplate mockRestTemplate;
    
    @InjectMocks
    private TransactionServiceImpl transactionService;
    
    @Before
    public void setUp() {
        //transactionService = new TransactionServiceImpl("test");
        //ReflectionTestUtils.setField(transactionService, "processLayerUrl", "foo");
    }
    
    @Test 
    public void getTransactionDataListByAccountTest() throws Exception{
        
        Transaction transaction = new Transaction();
        transaction.setPosAccountNumber("40010020070401");
        
        HttpHeaders header = new HttpHeaders();
        header.setContentType(MediaType.APPLICATION_JSON);
        
        ArrayList<Object> mockResponseObj = new ArrayList<Object>();
        //Added data inside this object

        ResponseEntity<Object> responseEntity = new ResponseEntity<>(mockResponseObj, HttpStatus.OK);
        
        when(mockRestTemplate.postForEntity(
                ArgumentMatchers.anyString(), 
                ArgumentMatchers.eq(Transaction.class), 
                ArgumentMatchers.eq(Object.class))).thenReturn(responseEntity);
        
        ResponseEntity<Object> actualResponse = transactionService.getTransactionDataListByAccount(transaction);
        
        System.out.println("--- Response ---");
        System.out.println(actualResponse);
    }
    
    /*
     * @Configuration
     * 
     * @ComponentScan("transaction.service.experience.service") static class
     * someConfig {
     * 
     * // because @PropertySource doesnt work in annotation only land
     * 
     * @Bean PropertySourcesPlaceholderConfigurer propConfig() {
     * PropertySourcesPlaceholderConfigurer ppc = new
     * PropertySourcesPlaceholderConfigurer(); ppc.setLocation(new
     * ClassPathResource("application.properties")); return ppc; } }
     */
}

这是我的建筑。格雷德尔

testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation 'junit:junit:4.12'

因此,restTemplate抛出NullPointerException而不是返回模拟obj。

共有1个答案

苍烨然
2023-03-14

发生这种情况是因为您使用的是Mockito注释,而不是Spring Boot提供的注释。

TransactionService应该用@autowiredmockresttemplate注释。

@mockbean用Spring应用程序上下文中的mock添加或替换原始bean,并将其注入到该上下文中需要它作为依赖项的任何bean中。

 类似资料:
  • Beans文件: 在BaseTest中,当调用)方法时,属性文件中的值起作用,但如果试图将该值用作中的变量,则该值为空。你能帮帮我吗?

  • 我正在尝试使用JAXB读取一个xml。 我正面临一个奇怪的问题,其中父类的属性没有被读取,但子类的属性被读取。我参考了论坛,但这似乎是一个奇怪的论坛。 谁能告诉我我犯了什么错误。 XML。 电话目录类 电话号码类 主类 输出 如您所见,尽管提到了字段的XMLAt⃣注释,但exchange eName为null。 谢谢,毗湿奴

  • 我是Jmeter的新手,我使用JSR223后处理器在响应中获取一些属性。不幸的是,我的响应以字符串json的形式返回,如下所示: {\n“TrueOffics”:“1.9047619047619047”、\n“DisplayOffics”:“1.90”、\n“minStake”:50.0、\n“MaxStack”:105263、\n“selectionId”:“11318855000001015h

  • 所以,昨天一切都很好,但现在Android Studio和我的项目抛出了这个错误: 我谷歌了很长时间,但还没有找到任何解决方案。我的项目没有任何单词“Assemble”(项目中的Ctrl+Shift+F)。 gradlew clean Build-StackTrace:

  • 在woocommerce my-account中,我想显示与一个变体属性相关的所有销售。在我的例子中,属性是艺人名称。我想显示与艺术家相关的每个产品的每个订单的尺寸/数量和买家名称。如果size为空,我想检索包含我添加的size的variation_sku。 我开始使用这个函数从Woocommerce中的产品ID获取所有订单ID 结果是相当好的90%的情况下,除了一些订单。“variation_i