본문 바로가기

Programing/테스트

(16)
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..
[NUnit] 닷넷 환경의 테스트 주도 개발 Visual Studio 2008 환경을 사용하고 있다.닷넷에는 [테스트] 메뉴가 존재하지만 써 보았는데 JUnit+이클립스 같이 깔끔하게 돌아가는 환경은 아니다. 테스트를 할 때마다 생기는 로그 파일이 뭔가 부담스럽다. 그래서 NUnit이라는 오픈소스프로젝트를 사용하는데 많이 이용하는 것 같다.NUnit은 아래와 같은 GUI Runner를 제공한다. 하지만 이클립스 처럼 IDE 환경 내에서 바로 돌아가지 않아서 Visual Studio 따로 NUnit 따로 창을 두 개를 띄워서 개발을 해야 하니 뭔가 개발~테스트가 분리되어 있는 느낌이다. NHibernate를 검토하다 보니 비주얼 스튜디오에 플러그인 할 수 있는 도구가 있어서 써보니 괜찮았다.이름은 TestDriven.Net인데 오픈소스의 경우 Per..
[NUnit] NUnit에서 x86 바이너리 테스트하기 NUnit은 .net 프레임워크를 위한 테스트 프레임워크이다.처음에는 AnyCPU로 선택해서 OS가 64비트라서 64비트로 동작하는 모듈을 테스트하는데,System.BadImageFormatException이 발생을 한다. 서드파티 라이브러리가 32비트용 dll이라서 그런 것 같았다. 제조사에게 64비트용 이미지를 요청하고, 시간이 없어서 개발은 32비트로 먼저 진행하기로 했다.그런데 이번에는 NUnit에서 아래와 같이 읽어오질 못한다. 알고보니 x86용 프로그램도 같이 제공되고 있었다. 런타임이 64비트인지 판단하는 정적 메소드static Boolean Is64Bit(){ return Marshal.Sizeof(typeof(IntPtr)) == 8;}