테스트 9

Mockito

Maven Dependency 버전의 경우 2.x 버전이 나오면서 BDD라는 개발방법이 추가되었는데 1.x로도 충분히 쓸 수 있다고 함 org.mockito mockito-all 1.10.19 test 기본 사용법 thenReturn 원하는 값을 리턴하는 것. 이런 방식으로 사용하는데, 이 경우는 id가 1인 경우에만 의도대로 동작하게 된다. 그러나 이렇게 각 id별로 모두 통제할 수는 없기 때문에 생겨난 것이 any~로 시작하는 matchers이다. UserDao dao = mock ( UserDao.class ); when ( dao.findById ( 1 ) ) . thenReturn ( testUser ); matchers 사용 방법은 예시와 같고, 세부적으로는 anyInt(), anyString..

테스트 2022.03.14

테스트 대역 (Test Doubles)

테스트 대역이란 테스트를 위해 사용되는 대역 배우(Stunt Double)같은 것을 말한다. 용도와 구현 방법에 따라 다음 용어로 구분할 수 있다. Dummy 가장 간단한 형태. 객체로 선언만 하고 아무 구현도 하지 않은 것. 주로 객체 전달에 사용되며 매개변수 목록을 채울 때 사용된다. Stub Dummy에서 조금 발전된 형태. 미리 준비되어 있는 응답을 제공해 줄 수 있도록 최소한의 코드를 구현해 둔다. Spy Stub의 기능에 함수들이 제대로 사용되었는지 확인할 수 있는 코드를 추가로 구현한 형태. 사용되는 객체가 정의된 방법으로 쓰여지는지 확인해야 할 경우 사용한다. Fake 실제 객체처럼 동작하도록 복잡하게 구현된 형태. 실제로 코딩을 하는 방식이고 logic이 필요하다. 그러나 실제 환경보다는..

테스트 2022.03.14

이클립스에서 JUnit4 사용하기

1. 이클립스에서 Maven 프로젝트 생성 2. Maven dependency에 JUnit4 추가 Maven dependency를 추가하기 위해서는 pom.xml 안에 아래 부분을 넣으면 된다. junit junit 4.12 test 이렇게 설정한 뒤 .m2/repository/junit/junit/4.12안에 들어가서 junit-4.12의 크기가 적절한지 확인해 본다. 내 폴더에서는 308KB는데 이 근처라면 괜찮다고 한다. 3. 플러그인 설치 More Unit : 테스트 코드와 실제 코드를 Ctrl + J로 편하게 오갈 수 있도록 해 준다. Eclemma : Coverage를 측정할 수 있다. ex) condition coverage : if-else condition 4. 설정 static impo..

테스트 2022.03.14

JUnit4

Annotation 기반의 간결한 테스트 프레임워크 JUnit4는 Annotation(@~~) 기반으로 테스트 코드를 작성할 수 있는 프레임워크이다. 테스트 코드를 만드는 데에 사용되는 Annotation은 다음과 같다. @Test : 테스트로 메소드가 실행된다 @Before : @Test가 실행되기 전에 실행된다. 랜덤 순서로 호출된다. @After : @Test가 실행된 이후 실행된다. 랜덤 순서로 호출된다. @BeforeClass : 맨 처음에 한번 실행된다. static 메소드 앞에만 가능하다. @AfterClass : 맨 마지막에 한번 실행된다. static 메소드 앞에만 가능하다. @Ignore : 뒤에 있는 @Test를 실행되지 않도록 할 수 있다. JUnit4의 사용 기본 junit-tea..

테스트 2022.03.14

단위 테스트 (Unit Test)

개발자가 만드는 White Box Test, 프로그램의 기능 중 작은 단위를 검증하는 것 단위 테스트는 개발자가 구현 시점에, 코드를 직접 보면서 작성하는 것이다. 독립적으로 작동할 수 있는 method나 class와 같이 작은 단위가 주요 테스트 대상이다. 단위 테스트를 함으로써 얻을 수 있는 장점은 다음과 같다. 생산성 향상 단위테스트를 작성할 경우, 개발생산성을 높일 수 있다. 왜냐하면 작은 단위에서 수행하는 테스트를 통해 개발 단계에서 발생하는 버그를 빠르게 찾을 수 있기 때문이다. 단위 테스트는 복잡한 조건도 한번에 수행할 수 있기 때문에 디버깅 시간을 전체적으로 줄여줄 수 있다. 물론 코드를 수정할 때마다 테스트를 수정하는 것이 필요하지만, 단위 테스트로 얻을 수 있는 생산성 향상을 고려해 본..

테스트 2022.03.14

Mock Testing

Mock Object 실 객체의 행동 중 원하는 부분을 재현할 수 있도록 해 준다! Mock Mock이라고 말할 때는 의미를 생각해 보지 않았는데 사실 Mock Object는 번역하면 '모의 객체'라고 한다고 한다. (위키백과) 객체 지향 프로그래밍으로 개발된 프로그램을 테스트할 때에 많이 사용되는데, 객체 지향적으로 작성된 모듈이나 객체를 흉내낼 수 있기 때문인 것 같다. 그런 만큼, 객체 지향의 개념을 제대로 적용하지 않은 프로그램을 테스트하려고 하면 테스트를 위해 코드를 뜯어고쳐야 하는 상황에 놓이게 된다. Mock Object는 자동화된 테스트가 필수적인 TDD(Test Driven Development, 테스트 주도 개발)에서 유용하게 이용될 수 있다. 아직 왜 그런지는 모르겠지만.. Mock ..

테스트 2022.03.14

소프트웨어 테스트의 종류 - 3단계 분류

시나리오 테스트 (Large Tests) 시나리오, Scenario : 영화의 대본 이름에서도 알 수 있듯, 대본 속 인물이 되어 연기를 하듯이 사용자의 입장이 되어 테스트를 하는 것이다. 즉, 사용자의 입장에서 전체 Application을 테스트하는 것이다. 그러나 이 방법은 느리고, 힘들고, 의도된 동작만을 테스트 할 가능성이 높아진다. 특히 개발자가 직접 테스트할 때에 이 방법을 사용하게 되면 처음 생각했던 대로, 그리고 정해진 동작 위주로 테스트를 하는 일명 Happy Path를 따르기 때문에 정확한 테스트가 이루어지기에는 한계가 있다. 따라서 이 부분은 전문적으로 테스트를 수행하는 Test Engineer가 주로 담당하게 되는 부분이다. 기능 테스트 (Medium Tests) 기능 단위로 테스트..

테스트 2022.03.14