Test

    [TEST] When 에서 하나 이상의 메소드 실행 피하기

    요즘 테스트 코드를 적을때는 항상 given - when - then 방식으로 많이 작성한다. given 에서는 Test 로 작성될 SUT 에 대한 의존성 주입 및 들어갈 값들에 대한 정의를 내린다. when 에서는 Test 할 로직을 실행하고 then 에서 결과값을 검증한다. 아래도 위와 같이 given - when - then 으로 작성된 테스트 코드이다. class CustomerTest { @Test void purchaseSucceedsWhenEnoughInventory() { //given var store = new Store(); store.addInventory(Product.SHAMPOO, 10); var customer = new Customer(); //when boolean pur..

    테스트 더블의 종류

    https://devroach.tistory.com/52?category=1031971 테스트 더블 Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 devroach.tistory.com 앞서 설명한 테스트 더블에 대해서 어떤 종류가 있는지 조금 더 알아보자. 테스트 더블의 종류 테스트 더블은 아래와 같이 4가지 분류로 나뉜다. 테스트 스텁 테스트 스텁은 원래의 구현을 최대한 단순한 것으로 바꾸는 것이다. 우리가 만약에 서버에서 로깅을 하다가 실패하는 로그를 찍어야 된다고 해보자. 하지만 로깅 자체는 테스트 로직에는 영향을 주지 않아 독립시켜..

    테스트 더블

    Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 대용해서 사용할수 있는 것을 뜻한다. 너무 추상적인거 같아서 쉽게 얘를 들면 Mocking 한 객체라고 생각해도 좋다. 순수히 그 메소드만 평가해야되는 단위 테스트에서는 이러한 테스트더블을 많이 사용하게 된다. 예를 들면 저번에 말했던 우리가 제어할 수 없는 대상을 테스트 더블로서 통제할 수 있는 것이다. 언제나 그렇듯, 코드로 보는것이 제일 나으니 코드로 한번 살펴보자. 예를 들어, 이런 Car class 가 있다고 해보자. 우리는 외부에서 Car 의 start 메소드 가 호출될때 Engin..

    어떤 것이 좋은 테스트 코드인가?

    프로그래밍을 계속 해오고 테스트코드를 작성하면서 내 일생을 관통할 주제 중 하나인 것 같다. 오늘은 그래서 Effective Unit Testing 을 읽으며 느낀 생각들을 정리해보려고 한다. 무엇이 좋은 테스트인가? 좋은 테스트 코드에는 아래와 같이 공통적인 다섯가지 요소들이 있다. 1. 테스트 코드의 가독성과 유지 보수성 우리가 현업에서 코드를 작성하다보면 흔히 불리우는 'Legacy' 로 구성된 시스템에 부딪힌다. 레거시 코드를 읽다보면 코드를 이해하는데만 오랜 시간을 쓰게 된다. 그래서 우리는 레거시 코드를 더 읽기 좋게 바꾸기 위해 리팩토링이란 것을 진행하고는 한다. 테스트 코드 또한 코드로 이루어져 있기에 가독성이 나쁘다면 'Legacy Code' 가 된다. Legacy Code 를 만나보지 ..

    테스트를 어떻게 해야하는가?

    개요 최근 어떤 테스트가 좋은 테스트인지? 무엇을 테스트 해야 하는건지에 대한 의문점이 생겼다. 그래서 springcamp.io 에서 발표한 용근님의 발표내용을 정리해보려고 한다. https://www.youtube.com/watch?v=YdtknE_yPk4&t=174 테스트로 얻을 수 있는 것 제일 중요한것은 안정감과 자신감의 상승. 안정감과 자신감은 미래의 나 그리고 현재의 나의 동료들이 느낄 수 있도록 테스트 코드를 작성해야 한다. 무엇을 테스트 할 것인가 예시코드는 로또였는데, 처음에는 로또가 6개를 반환하는 것만 테스트 되어 있었음. 요구사항은 아래와 같은 세가지였다. - 중복 처리 - 순서가 잘 바뀌었는지 - 6개의 수를 반환하였는지 처음에는 작성자가 Set 으로 구현했기 때문에 중복처리 테스..