BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
[Google App Engine] 나의 첫번..
머드초보의 블로그
54,048 Visitors up to today!
Today 14 hit, Yesterday 47 hit

 SUBSCRIBE

'TDD'에 해당되는 글 3건
2009/06/09 06:16

ruby on rails로 개발할 때에 이어 C#을 이용하는 지금도 테스트 코드를 쓰고 있다. rails로 개발할 때는 rspec만이 최고이고 다른 환경에서는 테스트를 쓰기가 어렵지 않을까 라는 생각을 가졌었는데, 분명히 그렇지 않은 것으로 판명되었다. C#으로 개발하는 요즘 테스트 코드 쓰는 것에 상당한 재미를 느낀다. 언어 자체를 봤을 때는 ruby가 C#보다 훨씬 더 유연하다. 그래서 mocking을 할 때 편한 것은 사실이다. 약간 불편함, 그리고 낯설음이 있음에도 불구하고 C#으로 테스트를 쓰는 것이 편하게 느껴지는 이유가 무엇일까 생각해 본다.

우선 테스트 수행속도를 들 수 있다. C#에서는 테스트 수행 속도가 매우 빠르다. 결과를 곧바로 알 수 있어서 진행에 막힘이 없다. 테스트 주도 개발은 테스트를 쓰고 실패하는 테스트를 보고, 실제 코드를 쓰고 성공하는 테스트를 보는 일을 계속 반복해야 한다. 이 때 테스트 속도가 느리다는 것은 큰 문제가 된다. rails는 테스트 속도가 느린 편이다. 속도를 빠르게 하기 위해서는 drb를 사용해야 한다. 좋아하는 IDE가 drb를 제대로 지원하지 못하는 경우가 있는데, 난감하다.
한 테스트 단위로 실행할 수 있는 것도 편리하다. 내가 수정한 테스트만 실행하면 테스트 수행 속도도 빨라진다. rails로 개발할 때는 autotest를 사용해서 수정된 부분에 해당하는 테스트만 실행하도록 할 수 있었다.

테스트 수행속도와 더불어 테스트 결과를 보여주는 UI도 매우 중요하다. 깔끔한 Red-Green 테스트 결과를 볼 수 있는 것은 코드를 작성하는데 리듬을 살려준다. 이 때 실패한 테스트의 스택 트레이스와 바로가기 링크는 필수다. Resharper가 보여주는 테스트 결과는 훌륭하다. 좋은 IDE는 개발의 즐거움은 물론이고, 생산성도 크게 향상시킬 수 있다. Resharper의 단축키, 인텔리 센스, 메소드 스텁기능, 그리고 빠른 속도 모두 프로그래밍에 재미를 준다.

좋은 테스팅 프레임웍도 테스트 코드를 쓰는 것을 즐겁게 해 준다. ruby에서의 rspec. C#에서 사용한 xunit.net과 moq. 두 프레임웍은 rspec만큼은 아니지만 테스트 코드를 간결하게 작성하는데 도움을 준다.

언어 자체가 가지고 있는 간결함, 그리고 유연함도 언급하지 않을 수 없다. rspec을 사용할 때 무엇이든 mocking가능하다는 사실은 테스트를 훨신 수월하게 쓸 수 있도록 한다. 반면 moq의 제약사항(virtual 메소드와 interface만 mocking할 수 있다.)는 좀 답답함을 느끼게 한다.

정리하자면 테스트를 즐겁게 쓰기 위해서는 테스트 수행 속도, 좋은 UI가 매우 중요하다. ruby 언어가 더 유연하고 rspec이 뛰어남에도 불구하고 C#에서 테스트를 쓰는 것이 ruby 못지 않게 재미있었던 이유는 좋은 테스트 UI와 실행속도 밖에 없다.

'이야기' 카테고리의 다른 글

접근성(Accessibility)  (0) 2009/09/17
지난 주말 Apache와 Tomcat의 연동에 대해 알아보게 된 이유  (0) 2009/09/06
TDD의 요건  (0) 2009/06/09
아이콘 : 스티브 잡스  (0) 2009/05/21
넛지(Nudge)  (0) 2009/05/20
독서법  (0) 2009/05/20
2009/05/12 13:09

Resharper 를 다운로드 받아 설치한다.

비쥬얼 스튜디오를 열고 프로젝트를 하나 생성한다.

Test 프로젝트를 추가한다. 테스트 프로젝트를 꼭 생성할 필요는 없지만, 보통 생성하는 듯이 보이며, 생성하는 것이 더 깔끔해 보인다.
Test 프로젝트 밑에 lib 디렉토리를 만들어서 xunit.netmoq 를 넣어 준다. 필요한 파일은 moq.dll, xunit.dll, xunit.extensions.dll 이다. 그리고 이 dll 파일들에 대해 참조 추가를 한다. lib 디렉토리 역시 꼭 만들 필요는 없지만 관리하기 편해 보인다.
Test 프로젝트에서 참조 추가를 해서 테스트하려는 프로젝트를 추가한다. 준비를 마치면 솔루션 탐색기는 다음과 같이 된다.

image

Test 프로젝트에 클래스를 하나 추가해서 테스트를 작성한다.

clip_image001[6]

테스트 오른쪽 옆의 동그라미를 누르면 테스트 메뉴가 보인다. 테스트를 실행하면 에러가 발생한다.  FirstClass가 없기 때문이다. FirstClass를 만들고 TrueTest()메소드를 추가한다.

clip_image001[8]

이제 Test 가 성공한다.

image

보기 좋고 편리한 UI와 빠른 테스트 속도가 마음에 든다.

2009/04/20 23:59

요즘 주로하는 업무는 C#을 이용합니다. 익숙함을 벗어나는 것에는 스트레스가 따르지만, 새로운 것을 배운다는 것은 즐거운 일이기도 합니다. 익숙해진 ruby에 비하면 불편하고, 복잡하게 느껴지기도 하지만, 그런 불평들은 아마도 무지함에 대한 다른 표현들이겠지요.

C#에 대해 조금씩 알아나가게 되면서 느끼는 것은 언어가 서로 서로 닮아간다는 것입니다. C#은 스크립트 언어가 아님에도 불구하고 스크립트 언어만큼 유연성을 주는 기능들이 추가되어 가고 있습니다. 3.0에서는 lamda 기능이 추가되었고 닫혀있는 클래스의 method 확장도 되며, C# 4.0 에서는 dynamic typing도 된다고 합니다.

ruby로 일하면서 가장 좋았던 것 중 하나는 rspec이었습니다. C#으로 테스트 코드를 작성하려면 어떤 것들이 필요할까? 라는 생각으로 조사를 좀 해 봤습니다. 테스트에 관련된 라이브러리들이 생각보다 많아서 놀라기도 하고, 당혹스럽기도 했습니다. 찾고자 하는 것은 가장 멋진 test framework과 가장 멋진 mocking framework이었습니다. 독보적은 지위를 갖는 것은 없었지만, 마음에 드는 것을 결정할 수는 있었습니다. xUnit.netmoq입니다.

덤으로 ReShaper 같은 훌륭한 비쥬얼 스튜디오 툴도 있다는 것도 알게 되었습니다. 아직 제대로 사용해 본 것은 아니지만, TDD를 하기에 충분히 잘 갖추어진 환경이라는 생각이 듭니다.

prev"" #1 next