What to do?
테스트 코드 작성하기
application.yaml
test/resources/application.yaml
# properties for test
spring:
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10:///
jpa:
hibernate:
ddl-auto: create
show-sql: true
kakao:
api:
base-url: "https://dapi.kakao.com/v2/local/search/address.json"
secret-key: ${KAKAO_API_SECRET_KEY}
Edit Configuration 메뉴를 통해서 카카오 키도 넣어주자.
AbstractIntegrationBaseTest
- 테스트 코드에서 Specification 대신 AbstractIntegrationBaseTest를 상속받아서 작성
@SpringBootTest
abstract class AbstractIntegrationBaseTest extends Specification {
static final GenericContainer MY_REDIS_CONTAINER;
static {
/**
* Container
* name : redis
* version : 6
* port : 6379
*/
MY_REDIS_CONTAINER = new GenericContainer<>("redis:6")
.withExposedPorts(6379)
MY_REDIS_CONTAINER.start();
System.setProperty("spring.redis.host", MY_REDIS_CONTAINER.getHost());
System.setProperty("spring.redis.port", MY_REDIS_CONTAINER.getMappedPort(6379).toString());
}
}
KakaoApiServiceTest
- kakao api service 코드 테스트
- buildUri
- 한글주소를 인코딩하고, 디코딩한 결과가 원래 값과 일치하는지 확인
- searchAddress - if address is null, then return nul
- 한글 주소에 null값을 입력하면 null을 return하는지 확인
- searchAddress - if address is valid, then return dto
- 유효한 한글주소를 입력했을 때, 카카오 API 요청결과가 제대로 된 값이 오는지 확인
- buildUri
class KakaoApiServiceTest extends AbstractIntegrationBaseTest {
@Autowired private KakaoApiService kakaoService
def "buildUri"() {
given:
String 한글주소 = "서울 상도동"
def charset = StandardCharsets.UTF_8
when:
def uri = kakaoService.buildUri(한글주소)
def 인코딩 = uri.toString()
def 디코딩 = URLDecoder.decode(인코딩, charset)
then:
디코딩 == "https://dapi.kakao.com/v2/local/search/address.json?query=" + 한글주소
}
def "searchAddress - if address is null, then return null"(){
given:
String 한글주소 = null
when:
KakaoApiResponseDto 검색결과 = kakaoService.searchAddress(한글주소)
then:
검색결과 == null
}
def "searchAddress - if address is valid, then return dto"(){
given:
String 한글주소 = "서울 동작구 상도동"
when:
KakaoApiResponseDto 검색결과 = kakaoService.searchAddress(한글주소)
then:
검색결과.documents.size()>0
검색결과.meta.totalCount>0
}
}
StoreEntityRepositoryTest
- StoreEntity
- 이전 포스팅에서 작성한 코드 일부 수정
@Entity(name="store")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StoreEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
private String name;
@Column(nullable = false) private String address;
@Column(nullable = false) private Double latitude;
@Column(nullable = false) private Double longitude;
private StoreEntity(String name, String address, Double latitude, Double longitude) {
this.name = name;
this.address = address;
this.latitude = latitude;
this.longitude = longitude;
}
public static StoreEntity of(String name, String address, Double latitude, Double longitude){
return new StoreEntity(name, address, latitude, longitude);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StoreEntity that = (StoreEntity) o;
return id.equals(that.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
- StoreEntityRepository
@Repository
public interface StoreEntityRepository extends JpaRepository<StoreEntity, Long> {
}
- StoreEntityRepositoryTest
- Save Entity, Check Fields
- StoreEntity 저장 후, 저장된 내용 확인
- Save Entity, Check Count
- StoreEntity 저장 후, findAll로 개수가 1개 늘어났는지 확인
- Save Entity, Check Fields
class StoreEntityRepositoryTest extends AbstractIntegrationBaseTest {
@Autowired StoreEntityRepository storeEntityRepository;
def setup(){
storeEntityRepository.deleteAll();
}
def "Save Entity, Check Fields"(){
given:
String address = "서울특별시 동작구 상도동"
String name = "할리스커피"
Double latitude = 12
Double longitude = 12
def store = StoreEntity.of(name, address, latitude, longitude);
when:
def saved = storeEntityRepository.save(store)
then:
saved.getAddress() == store.getAddress()
saved.getName() == store.getName()
saved.getLatitude() == store.getLatitude()
saved.getLongitude() == store.getLongitude()
}
def "Save Entity, Check Count"(){
given:
String address = "서울특별시 동작구 상도동"
String name = "할리스커피"
Double latitude = 12
Double longitude = 12
def store = StoreEntity.of(name, address, latitude, longitude);
when:
def cntBeforeSave = storeEntityRepository.findAll().size();
def saved = storeEntityRepository.saveAll(Arrays.asList(store))
def cntAfterSave = storeEntityRepository.findAll().size();
then:
cntAfterSave == cntBeforeSave+1
}
}
'Java > Spring' 카테고리의 다른 글
[Spring] 간단한 SNS 만들기 #1 (0) | 2022.12.22 |
---|---|
[Spring] 길찾기 서비스 #6 (0) | 2022.12.11 |
[Spring] 게시판 만들기 #12 (0) | 2022.11.26 |
[Spring] 게시판 만들기 #11 (0) | 2022.11.24 |
[Spring] 게시판 만들기 #10 (0) | 2022.11.23 |