본문 바로가기

Programing/테스트

(10)
[Spock] when: 및 then: 블럭에서 with 사용하기 Spock에서 기본적인 테스트를 작성했다면 when: 블럭과 then: 블럭에 대해 알 수 있다. when: 블럭에서의 with Groovy 문법에 보면 with 라는 키워드로 같은 객체에 대해 동시에 배정(assignment)을 할 수 있다. 이 기본 그루비 문법은 when: 블럭에서 사용이 가능하다. 예. 과일 아래와 같은 Fruit 클래스와 내부에 Color 열거형(enum)이 있다. import lombok.Getter; import lombok.Setter; @Getter @Setter public class Fruit { private String name; private Color color; private int quantity; @Override public String toString(..
[삽질] Spock : ClientHttpRequestInterceptor 테스트 하기 Spock에서는 Mocking을 할 때 파라미터의 값 같은 조건을 제약해서 정할 수가 있다.Reference: Argument Constrains 전임자가 ClientHttpRequestInterceptor를 구현하여 RestTemplate의 요청과 응답을 가로채서 로그를 찍는 코드가 있었다. 코드는 code.i-harness의 아래 글의 코드와 비슷하게 되어 있다.옵션 2. 인터셉터 사용하기 > 인터셉터 구현https://code.i-harness.com/ko-kr/q/79571a 문제는 RestTemplate의 응답을 하는 외부 API가 응답을 UTF-8로만 하지 않고 EUC-KR로 응답을 주는 경우가 있었다.그래서 한글이 포함되어 있는 경우 로그가 깨져서 보였다. 문제를 해결할 방법은 간단했다. 컨..
assertThat (org.fest.assertions vs org.hamcrest) fest는 Fixtures for Easy Software Testing의 약자로 쉬운 소프트웨어 테스트를 위한 픽스쳐들이라는 의미이다.hamcrest랑 짧게 비교를 해보았다. 예) 결과가 null인지 assert hamcrest-Assertimport static org.hamcrest.MatcherAssert.assertThat;import static org.hamcrest.Matchers.nullValue;import static org.hamcrest.core.Is.is; assertThat(result, is(nullValue())); FEST-Assertimport static org.fest.assertions.api.Assertions.assertThat; assertThat(result..
[Spring] 테스트 코드에서 private 필드 처리 면접을 보러 갔다가 까칠하게 생긴 면접관한테 이런 질문을 받은 적이 있다.클래스에 private 필드가 있는데 테스트를 어떻게 수행하겠느냐?당시 자바에 대한 공부를 하고 갔기에 리플렉션에 대해서 알고 있어서 리플렉션을 이용하면 private 필드도 접근이 가능하다고 알고 있어서 그렇게 대답을 하였다. 어제 테스트 코드를 작성하다가 private 필드를 조작할 필요가 있었다. 처음에는 리플렉션을 생각했는데 코드가 길어지고 리플렉션 사용법도 찾아봐야 해서 public 세터를 통해 값을 넣을 수 있게 만들었다.위의 그림에서 세 세터는 실제 테스트를 위해서 만들어진 것이다. 어떻게 보면 객체지향개념중 캡슐화를 깨뜨린 것이다. 오늘 스프링 테스트 프레임워크를 공부를 하다가 스프링에는 리플렉션을 사용하기 쉽게 만들..
단위테스트가 아닌 것들, 팁 레거시코드 활용 전략p.43단위테스트는 빠르게 실행된다. 빠른 속도로 실행되지 않는 단위테스트는 단위테스트가 아니다. 다음과 같은 일을 한다면 그것은 단위테스트가 아닐 것이다.1. 해당 테스트가 데이터베이스와 통신한다.2. 네트워크를 통해 통신한다.3. 파일시스템을 건드린다.4. 실행하기 위해 구성 파일 편집처럼 환경을 바꾸는 작업(.cfg나 .ini 파일 등의 수정)을 해야 한다. 이런 일을 하는 테스트가 나쁜 것은 아니지만 이와 같은 코드를 작성하기 위해 보통 단위테스트 하니스 내에서 작성하게 된다. 하지만 이 경우, 진정한 단위테스트 루틴과 구별하는 것이 좋다. 그렇게 함으로서 변경시킬 때마다 사용할 수 있고 빠르게 실행되는 일련의 테스트 루틴을 확보 할 수 있기 때문이다. NUnit에서는 카테고리..
TDD 디자인 패턴(design pattern) JUnit in ActionPetar Tahchiev, Felipe Leme, Vincent Massol, Gary Gregory, 2010JUNIT IN ACTION: 단위 테스트의 모든 것(인사이트, 이복연 옮김. 2011) 퍼사드(facade) p.27제어 구조 역전 p.36싱글톤(singleton) p.98제어 역전(Inversion of Control, IoC) p.140
TDD 모범사례(best practice) '베스트 프렉티스'를 모범사례로 번역을 한 것은 참고문헌 MAS10 p.xx/p.2를 따른 것이다. "한 번에 하나의 객체만 테스트하라." - MAS10 p.43"assert 호출 시에는 실패 원인을 기술하라." - MAS10 p.47"하나의 @Test 메서드에서는 하나의 테스트만 수행하라." - MAS10 p.50"실패할 가능성이 잇는 모든 것을 테스트하라." - MAS10 p.53"테스트를 통해 코드를 개선하라." - MAS10 p.57"예외 테스트도 읽기 쉽게 만들어라." - MAS10 p.59"테스트를 통해 코드를 개선하라." - MAS10 p.59"테스트를 건너뛸 때는 반드시 그 이유를 명시하라." - MAS10 p.62"같은 패키지, 다른 디렉터리" - MAS10 p.67"리팩터링하라" - M..
[NUnit] 사례TDD - 완벽하지 않은 테스트 확장메서드를 이용해서 byte 배열을 Int32로 변환하는 정적메서드를 만들었다.모양은 아래와 같았다. (빅엔디안이라서 Reverse로 순서를 바꾸어주었다.) public static Int32 FromBytes(this byte[] value) { byte[] t = new byte[value.Length]; Array.Copy(value, t, value.Length); Array.Reverse(t); return BitConverter.ToInt32(t, 0); } 위에 대한 테스트는 아래와 같았다. [Test] public void FromBytesTest() { Byte[] b = new Byte[] { 0x29, 0x4A, 0xA6, 0xA5 }; Assert.AreEqual(0x294AA6A..