-
Notifications
You must be signed in to change notification settings - Fork 4
#36 junit 이용한 테스트 코드 작성 #37
base: feature/30
Are you sure you want to change the base?
Conversation
productId = productDao.selectProductsIndex(productId); | ||
if (productDao.deleteByProductIdAndIndex(ProductDTO.DEFAULT_PRODUCT_SEARCH_CACHE_KEY, productId) == false) { | ||
throw new RuntimeException("물품 레디스 리스트에서 삭제 실패!"); | ||
log.error("물품 레디스 리스트에서 삭제 실패! {}", productId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
에러만 찍고 예외를 던지지 않는 이유가 있을까요? 이 메소드를 호출하는 입장에서는 정상 처리된 것으로 보일 수도 있을 것 같네요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
단순하게 예외를 던지면 테스트가 실패하여 변경하였습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
레디스에 있는 캐싱된 데이터 까지 삭제하려면 테스트 코드에서
@Mock
private RedisTemplate<String, Object> redisTemplate;
캐싱 데이터를 사전에 넣어야 할까요??
CategoryDTO categoryDTO = generateCategory(); | ||
categoryDTO.setName("testName2"); | ||
categoryMapper.updateCategory(categoryDTO); | ||
assertTrue(categoryDTO.getName().equals("testName2")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
assertEquals
를 해주시면 좋을 것 같네요~categoryDTO.setName("testName2");
때문에 언제나 이것은 true가 리턴될 것 같은데요. 이건 올바른 테스트일까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setName 후에
categoryMapper.updateCategory(categoryDTO); 변경후
실제 Name필드가 정상 바뀌었는지 확인하기 위한 테스트인데
일부분만 테스트 된다고 생각은 됩니다.
그러면 assertEquals에 전체 필드를 확인해야 할까요??
void findAllProductsByCacheId() { | ||
MockitoAnnotations.initMocks(this); // mock all the field having @Mock annotation | ||
UserDTO userDTO = generateUser(); | ||
productDao.findAllProductsByCacheId(userDTO.getId()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
findAllProductsByCacheId
내부에서 일어나는 로직 검사라던지 리턴값이라던지 그런 스펙에 대한 검사가 없네요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Mock
private RedisTemplate<String, Object> redisTemplate;
@Mock
private ValueOperations valueOperations;
선언 후에
redisTemplate.opsForList().rightPush(ProductDTO.DEFAULT_PRODUCT_SEARCH_CACHE_KEY, productDTO);
여기서 redisTemplate이 mock객체로 null은 아니지만 List,push 할때 null객체로 에러가 납니다.
접근을 어떻게 해야 할까요??
- deleteProduct 메서드에 실패시 예외로 변경 - 테스트시 Mock 어노테이션으로 redisTemplate에 데이터 추가하여 캐싱 처리 중..
- assertTrue -> assertEquals 메서드 변경
|
||
// Mock redisTemplate 테스트 | ||
//redisTemplate.opsForList().rightPush(ProductDTO.DEFAULT_PRODUCT_SEARCH_CACHE_KEY, productDTO); | ||
//productService.deleteProduct(userDTO.getAccountId(), productDTO.getId()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이런 PR은 실제 코드에 합치려고 보내는것인데 이런 주석들이 실제 코드에 쌓이면 어떻게 될까요?
여기서 보면 CI/CD가 잘못 적용된 것 같습니다~ 3개가 동시에 돌아갔네요. 여기는 CI만 적용하는게 맞습니다~ |
junit 이용한 테스트 코드 작성