You will be fine

<Spring & JPA 웹서비스 만들기 > 구현 (2) - 서비스's

by BFine
반응형

가. 추첨 서비스

 a. 테스트 작성 - 랜덤으로 추첨하기

  -  화면단에서 추첨할 이름 리스트, 금액, 추첨인원수를 넘겨준다 가정하고 랜덤으로 사람을 뽑아보자

public class DrawServiceUnitTest {
    
    private static final int FIRST = 0;

    @Test
    public void 유저추첨하기(){ 
       
        List<String> nameList = new ArrayList<>();
        int people = 1;
       
        nameList.add("김철수");
        nameList.add("김나영");
        nameList.add("김영희");
        nameList.add("황호준");
        
        List<Integer> numberList = new ArrayList<>();

        int count = 0;
        
        while (count != people) {
            int number = new Random().nextInt(nameList.size());
            if(count != FIRST){
                if(numberList.contains(number)){
                    continue;
                }
            }
            numberList.add(number);
            count++;
        }

        List<String> pickList = numberList.stream()
                  .map(number->nameList.get(number))
                  .collect(Collectors.toList());
        
        pickList.stream().forEach(System.out::println);

        assertEquals(people, pickList.size());
    }

}

  - 이부분은 Spring이나 DB 관련부분(Bean, JPA 등)이 없기 때문에 @SpringBootTest가 필요가 없다 

  - 이렇게 하는것보다 더 좋은 방법이 있을 것 같긴한데 이부분은 어떻게 하면 더 좋을지는

     나중에 찾아보면서 비교해봐야겠다..

 

나. 유저 서비스

 a. 테스트 작성 - 결과업데이트하기

@SpringBootTest
public class UserServiceTest {
    
    private static final int FAIL = 0;

    @Autowired
    UserRepository userRepository;

    @Autowired
    RedisTemplate<String,Object> redisTemplate;

    @Test
    public void 결과업데이트하기() {

        int bet = 15000;
        String title = "점심값";

        DrawRequestDTO drawRequestDTO = DrawRequestDTO.builder()
        .name(Arrays.asList("김철수","김영희"))
        .bet(bet)
        .title(title)
        .build();

        List<String> pickNameList = Arrays.asList("김철수");

        int result = userRepository.updateAmount(pickNameList, drawRequestDTO);
        assertNotEquals(FAIL, result);
    }

 

다. 고민

 a. TDD를 어떻게 해야 맞는걸까?

  -  조금 만들어보면서 고민이 되는 부분을 정리해봐야겠다.

      1. 테스트 코드의 범위

         => 요게 제일 어려운것 같다. DB를 포함하지 않는 순수 Java만 있는 것을 단위테스트로 하려고 했는데

              물론 지금하는게 간단한거라 그렇기 하지만 DB와 상호작용 없이 테스트하는 의미가 있을까?  

      2. 빈번한 수정 발생

         => 테스트코드 작성 -> 실제 코드작성 -> 살짝 달라짐 -> 테스트코드를 수정(?)

              사실 테스트 코드를 수정해야하는데 아무래도 차이가 있는 부분들이 있다보니 결국 후에 테스트코드를

              수정하게 되는데 이부분은 많이 해봐야 알것같다. 

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기