웹에만 매쉬업이 있는게 아니다. JUnit에도 있다. 아참, 앞으로 있을 것이다.

켄트 벡과 함께 JUnit4 개발을 책임지고 있는 David Saff라는 사람이 있다. David Saff는 MIT에서 JUnit Max의 기본 아이디어인 Continuous Testing을 연구했던 사람이다. 아마 성훈(http://sestory.tistory.com/)이가 있던 그 연구소 같은데.. 아님 말고. 작년엔가 구글에 입사해서 테스팅 엔지니어로 활동하고 있다.

아무튼 David Saff는 JUnit 메일링 리스트에서 여러번 테스트에서 사용하는 assert 방법에 대한 자신의 아이디어와 연구중인 내용을 소개한 적이 있다. JUnit은 Hamcrest의 assertThat과 Matcher 등을 차용해서 기존의 assertEquals()와 같은 assert문을 대체한 바 있다. 하지만 assertThat과 Matcher방식이 처음에는 읽기가 편한 것 같고 확장성도 좋아보이지만, 나름 단점도 많이 있다.

David Saff는 그래서 Mock프레임워크 등에서 애용되는 스타일인 dot(.)으로 연결되는 문장으로 assert을 기술하는 방법을 연구해왔다. 얼핏 그 내용을 JUnit 메일링 리스트에 공개한게 작년 봄인가 여름인가 그랬던 것 같은데, 오늘 보니 dotmesh(http://github.com/dsaff/dotmesh)라는 이름으로 공개를 했다. 자세한 내용은 그의 블로그(http://saffgreenbar.blogspot.com/2010/03/dotmesh-free-assertions-from-domain.html)의 글을 읽어보면 알 수 있을 것이다.

예를 들면 다음과 같은 문장을

assertThat(responseMessage, containsString(”OK”));

닷메쉬에서는 아래와 같이 만들 수 있다.

assertThat(responseMessage).contains(”OK”);

그 외에도 예를 보면

assertThat(Arrays.asList("a", "b", "c")).contains("a"); // passes

assertThat("abc").matches(".*a.*"); // passes

assertThat(not(Arrays.asList("a", "b", "c"))).isEmpty(); // passes

assertThat("abc").contains("c"); // passes

assertThat(Arrays.asList("a")).isEmpty(); // error: “Failed: <[a]>.isEmpty()”

assertThat("abcde").startsWith("ghi", 1); // error: "Failed: <abcde>.startsWith(<ghi>,<1>)"

assertThat(1).notEquals(2);

assertThat(not(1)).equals(2);

 

이런 식이다.

장단점과 특징에 대해서는 블로그 글에 잘 설명되어있다. 아직 더 발전시킬 내용이 많겠지만, 아무튼 기대된다. 언젠가는 JUnit에 들어가겠지.

당장은 짬을 내기 힘들어서 써보지는 못하겠지만, 다음 개발작업에 들어가면 꼭 쓰고 말테다. 누가 좀 적용해보고 감상 좀…

그런데 왜 이름이 닷메쉬(dotmesh)일까? 메쉬업이 인터넷의 다양한 서비스를 엮어서 새로운 서비스를 만들어내는 작업이듯(맞나?), 닷메쉬는 메소드 호출에 사용하는 dot(.)기호로 메소드를 엮어주기 때문이다. 지금은 assertThat() 뒤에 하나 씩이지만, 아마 굴비엮듯이 계속 이어져 만들어질 수도 있겠지. 그런데 이름을 hamcrest처럼 assertThat으로 써서 좀 맘에 안든다. 그냥 assert(…).equals(..) 이런 식이면 안되나?

사용후기는 다음 기회에.

UPDATE: 아차! 매쉬업은 MashUp이었지! 발음이 비슷하다고 이런 착각을… :(

역시 블로그는 졸릴 때 쓰면 안돼. 그냥 낚시용 제목으로 남겨놔야지.

Related posts:

  1. JUnit 4.7 분석 (1) JUnit 4.7 코드 첫인상
  2. JUnit 4.7 분석 (0) 시작
  3. JUnit Max – Kent Beck
  4. Spring 3.0 (50) JUnit 4.5~4.7 겨우 지원성공 그리고 계속되는 악몽
  5. Spring 3.0 (49) JUnit 4.7로 변경과 상속의 폐해
  6. JUnitMax Core가 포함된 JUnit 4.6 릴리스
  7. JUnit 4.7과 OCP
  8. 유쾌한 이슈처리 재촉 메일
  9. 테스트 코드에서 static import를 편하게 넣는 방법
  10. 이클립스에서 JUnit4 테스트의 특정 테스트메소드만 실행하기
  11. Spring 3.0 (51) @Rule 지원성공 그리고 Formatter, ConversionService의 전면 등장

Facebook comments:

to “JUnit assert 매쉬업”

  1. assert는 예약어라 안되지 않을까요? ^^

  2. 엽우/ 그러게요.. @.@

  3. assertThat과 Matcher에 단점도 있다고 하셨는데, 혹시 어떤건지 알려주실 수 있으신지요?

  4. 초보/ 링크한 글에 잘 나와있어요. 영어긴 하지만…
    제가 지금은 좀 많이 바빠서 틈이 없고요. 나중에 시간 날 때 한번 정리해보겠습니다.

  5. 감사합니다.

  6. I am really enjoying the theme/design of your blog. Do you ever run into any browser compatibility problems? A couple of my blog readers have complained about my site not working correctly in Explorer but looks great in Firefox. Do you have any advice to help fix this problem?

  7. Browse Around THIS Site
    womens ugg boots http://bootsforwomenoutlet.com

  8. Browse Around These Guys
    ugg bailey button sale http://baileybuttontriplett.com

  9. buy mbt shoes online JUnit assert 매쉬업 » Toby’s Epril

  10. mbt shoes mens JUnit assert 매쉬업 » Toby’s Epril

  11. a lot of wonderful informa&X74;ion on here, : D.

  12. Ѕuperb post but І was wаnting tо knоw if
    yоu could writе a litte mоre on this subject?
    ӏ’d be very thankful if you could elaborate a little bit more. Kudos!

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha