내 서비스 구현 클래스 내에서 @Value를 사용하여 application.properties에서 값을 가져 오려고합니다. 잘 작동합니다. 그러나 테스트 케이스를 작성하는 동안 null이 발생합니다.
내부 서비스 impl 클래스
@Value("${transaction.service.process.layer.url}")
private String processLayerUrl;
테스트 파일
@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, header, 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; } }
*/
}
src/test/resources 안에 application-test.properties 파일을 지정했습니다.
여기 내 build.gradle이 있습니다.
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation 'junit:junit:4.12'
이 restTemplate으로 인해 mock obj를 반환하는 대신 NullPointerException이 발생합니다.
- 답변 # 1
관련 자료
- javascript - JQuery를 사용하여 동적으로 colspan 값 설정
- swift - UISlider를 사용하는 시작 값 문제
- python - if 문을 사용하여 함수를 호출 한 다음 if 문 안에 반환 된 값을 인쇄하려면 어떻게해야합니까?
- javascript - 각각을 사용하여 선택된 확인란 값을 배열로 푸시
- 자바 스크립트를 사용하여 Google 설문지에 입력 값을 설정할 수 없습니다
- javascript - FOREACH를 사용하여 json 배열의 최소값을 어떻게 얻을 수 있습니까?
- javascript - 지정된 값을 사용하여 테이블에서 td를 색칠하는 방법은 무엇입니까?
- javascript - Fetch를 사용하여 React에서 ID가 짝수 인 각 앨범에서 첫 번째 이미지를 얻으려면 어떻게해야합니까?
- node.js - 공유 자바 스크립트 모듈에서 가져 오기 사용
- javascript - 한 번만 작동하는 텍스트 상자에 버튼 값을 가져 오는 onclick () 함수
- 아카이브 된 파일의 json에서 특정 값을 읽는 방법 javascript 및 jszip 사용
- javascript - 가져 오기를 사용할 때 JSON에 어떻게 액세스합니까?
- REGEX 패턴을 기반으로 Jenkins 파이프 라인에서 Groovy를 사용하여 값을 설정합니다
- java - jooq를 사용하여 집계 값으로 정렬 된 그룹을 가져 오는 방법
- javascript - 사용자가 Svelte 및 Sapper를 사용하여 버튼을 클릭하면 새 페이지를 가져옵니다
- PL/SQL을 사용하여 JSON 객체를 우회하고 모든 데이터를 Oracle에서 키 값 형식으로 출력합니다
- c# - 상속하는 클래스에서 참조하는 객체에 대한 속성을 사용하면 이점이 있습니까?
- mysql - 행 현명한 연산을 사용하여 설정된 SQL 열 기본값
- reactjs - 이벤트를 사용하지 않고 구성 요소의 속성을 가져 오는 방법
- javascript - Twilio를 사용하여 보낸 메시지 목록을 resjson 할 수 없습니다
Spring Boot에서 제공하는 주석 대신 Mockito 주석을 사용하기 때문에 발생합니다.
transactionService
주석을 달아야합니다.@Autowired
과mockRestTemplate
와@MockBean
.@MockBean
Spring 애플리케이션 컨텍스트에서 원본 빈을 모의로 추가하거나 대체하고 종속성으로 필요한이 컨텍스트의 빈에 삽입합니다.작성중인 테스트가 통합 테스트 인 경우 transactionService를 수동으로 인스턴스화해서는 안됩니다.
여기서 무엇을 테스트하고 있는지 재고해야합니다. WebMvc 테스트는 서비스가 아닌 컨트롤러를 테스트하기위한 것입니다. 서비스를 테스트하고 싶다면-Spring없이 일반 단위 테스트를 작성하는 것을 고려하십시오. 실제 통합 테스트를 원한다면
@SpringBootTest
.