>source

restTemplate postForEntity ()를 모의하려고 시도했지만 thenReturn () 내부에서 전달하는 ResponseEntity 객체 대신 null을 반환합니다.

서비스 Impl 클래스

public ResponseEntity<Object> getTransactionDataListByAccount(Transaction transaction) {
    ResponseEntity<Object> transactionHistoryResponse = restTemplate.postForEntity(processLayerUrl, transaction, Object.class);        
    return new ResponseEntity<>(transactionHistoryResponse.getBody(), HttpStatus.OK);
}

내부 테스트 클래스

@SpringBootTest
@ActiveProfiles(profiles = "test")
public class TransactionServiceImplTest {
    @MockBean
    private RestTemplate mockRestTemplate;
    @Autowired
    private TransactionServiceImpl transactionService;
    @Test 
    public void getTransactionDataListByAccountTest() throws Exception{
    
    Transaction transaction = new Transaction();
    transaction.setPosAccountNumber("40010020070401");
            
    ArrayList<Object> mockResponseObj = new ArrayList<Object>(); //filled with data
    ResponseEntity<Object> responseEntity = new ResponseEntity<Object>(mockResponseObj, HttpStatus.OK);
    
    when(mockRestTemplate.postForEntity(
            ArgumentMatchers.anyString(), 
            ArgumentMatchers.eq(Transaction.class), 
            ArgumentMatchers.eq(Object.class))).thenReturn(responseEntity);
    
    // THROWING NullPointerException at this line.
    ResponseEntity<Object> actualResponse = transactionService.getTransactionDataListByAccount(transaction);
    
    System.out.println("--- Response ---");
    System.out.println(actualResponse);
}

오류

테스트 케이스를 실행하는 동안 실제 서비스가 호출됩니다. 서비스 impl 클래스 내에서 resttemplate을 호출하려고 할 때 null을 반환합니다.

NullPointerException을 발생시키는 transactionHistoryResponse에서 getBody ()를 호출하려고합니다.


  • 답변 # 1

    모의 설정에서 matcher ArgumentMatchers.eq(Transaction.class) 전달하는 인수가 다음과 같은 경우에만 일치합니다. Class<Transaction> 목적 Transaction.class . 이것은 당신이 원하는 것이 아닙니다. 당신은 그것이 무엇이든 일치하기를 원합니다유형 Transaction . 이렇게하려면 ArgumentMatchers.any(Transaction.class) .

    이 답변에는 좋은 설명이 있습니다.

관련 자료

  • 이전 c# - 사전 개체에 저장된 비동기 Http GET 작업
  • 다음 java - Ubuntu에 Oracle WebLogic Server 12214 설치