상태를 유지하며 일련의 시나리오를 테스트하고 싶으시다면 Junit의 DynamicTest를 활용해 보시면 좋을 것 같습니다. 지금처럼 상태를 공유하는 단위테스트는 지양하시는 것이 좋습니다. 체스 미션을 하면서 받았던 피드백입니다. 상태를 공유한다는 의미는 무엇일까? 시나리오 테스트는 무엇이고, DynamicTest는 어떻게 할 수 있을까? 코드를 수정해가며 알아보겠습니다! Bad 우선 문제의(?) 테스트 코드의 일부입니다. 게임의 상태 `GameStatus`를 전역변수로 공유하여 사용하고 있습니다. GameStatus gameStatus; // 상태를 공유하는 부분 Board board = new InitialBoardFactory().generate(); @BeforeEach void setUp() {..
전체 글
Board를 어떻게 만드는지에 대한 제어를 하고 싶으시다면 제어하고 싶은 영역의 의존성을 역전시켜 보면 좋을 것 같습니다. 체스 미션을 수행하던 중 이런 리뷰를 받았었습니다. 왜 의존성 역전을 제안 하셨을까? 또 어떤 장점이 있을까? 기존 코드는 이러했습니다. public class Board { private static final List INITIAL_BOARD = List.of( "RNBQKBNR", "PPPPPPPP", "........", "........", "........", "........", "pppppppp", "rnbqkbnr" ); private final Map board; private int turnCount; private Board(Map board, int turnC..
블랙잭 미션을 수행하면서 이런 피드백을 받았었습니다. 돈과 관련된 건 BigDecimal을 사용해 보면 좋을 것 같습니다! 왜 int나 double로 연산하면 안 되는 걸까요? 직접 두 눈으로 확인해 보겠습니다. double vs BigDecimal 간단한 테스트를 먼저 해보겠습니다. 잔돈을 구하는 간단한 로직입니다. !!! 테스트는 실패합니다. 눈앞에서 소중한 `0.00000000000000002`가 사라졌습니다. BigDecimal으로 해보면 어떨까요? 소중한 `0.00000000000000002`를 되찾았어요! double이 정확한 소수점을 표현하지 못한 이유는 부동소수점이기 때문입니다. 즉, 정확한 값이 아닌 근사치 값으로 표현되고 있어 계산에 오차가 생겼던 것입니다. BigDecimal BigD..