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
관련 자료
- java - Spring Boot를 사용하여 제공 할 수 없습니다
- Kotlin에서 스프링 데이터와 r2dbc를 사용하여 클래스를 매핑하는 방법
- javascript - Twilio를 사용하여 보낸 메시지 목록을 resjson 할 수 없습니다
- java - Apache Camel을 사용하여 바코드를 읽을 수 없습니다
- Python Drive API를 사용하여 200MB 이상의 csv 파일을 업로드 할 수 없습니다
- javascript - react-router를 사용하여로드 할 수없는 경로
- java - Spring Boot (236RELEASE) RestTemplate 및 Unwrap Root 사용시 역 직렬화가 실패 함
- spring - JUnit 5에서 @Value를 사용하여 속성 값을 가져올 수 없습니다
- javascript - iframe을 사용하여 Angular JS 애플리케이션에서 Angular 10 애플리케이션으로 메시지를 게시 할 수 없음
- jquery - Kendo UI Grid를 사용하여 백엔드 페이지 매김을 사용할 수 없습니다
- google chrome - Spring을 사용할 때 HTTP에서 HTTP로 브라우저 변경 요청을 리디렉션합니다
- typescript - Angular에서`ComponentFactoryResolver`를 사용할 때 다른 구성 요소로 데이터를 전달할 수 없습니다
- reactjs - JSX에서 삼항 연산자를 사용하여 리디렉션을 포함 할 수 없습니다
- azure-servicebus-jms-spring-boot-starter를 사용하여 Spring Boot 애플리케이션에서 Azure Service Bus 주제에 쓸 수 없음
- python - xpath를 사용하여 href 태그에서 텍스트를 추출 할 수 없습니다
- python - pymysql을 사용하여 MySQL에 데이터 파일을로드 할 수 없습니다파일을 찾을 수 없습니다
- postgresql - Spring JPA를 사용한 SQL 조인 테이블
- java - 봄 부팅에서 JSON을 구문 분석 할 수 없습니다
- 파이썬에서 문자열 형식을 사용하여 원하는 출력을 얻을 수 없습니다
모의 설정에서 matcher
ArgumentMatchers.eq(Transaction.class)
전달하는 인수가 다음과 같은 경우에만 일치합니다.Class<Transaction>
목적Transaction.class
. 이것은 당신이 원하는 것이 아닙니다. 당신은 그것이 무엇이든 일치하기를 원합니다유형Transaction
. 이렇게하려면ArgumentMatchers.any(Transaction.class)
.이 답변에는 좋은 설명이 있습니다.