NUnit 코드를 어디에 놓을 것인가?

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:March 18, 2005

역시나 MS Pattern & Practice 팀(이하 PP팀)은 나에게 또 하나의 두통거리를 던져줬다.

처음 NUnit를 사용하기 전에 사전조사를 했었다. 이런저런 관련문서를 읽어보고, 약간의 테스트를 마친 후에 나는 NUnit 코드는 테스트 대상 코드와 분리하는 편이 낫다고 판단했다. 이를테면 다음과 같이 프로젝트를 나누는 것이다.

  • 대상 코드를 포함하는 프로젝트 이름: Microsoft.ThisIsSource

  • NUnit 코드를 포함하는 프로젝트 이름: Microsoft.ThisisSource.Tests

이렇게 구분하면 소스와 테스트 코드가 분리되기 떄문에 관리하기 편하다. 별다른 설정없이 대상 프로젝트에서는 종전처럼 프로그래밍을 하면 된다. 또한 테스트를 위해 .config 파일을 추가해야 할 경우가 있는데, 이 설정 파일도 테스트 프로젝트에 넣으면 된다. (분리하지 않으면 어떤 문제가 발생하는지는 뒤에서 언급하겠다.)

여러 블로거(적어도 내가 방문한 블로그의 주인)들이 위와 같은 방식을 추천했다. 그러나 PP팀은 전혀 다른 방식으로 테스트 코드를 관리했다. 즉 프로젝트를 나누지 않고 하나의 프로젝트에 대상 코드와 소스 코드를 합친 것이다. 물론 하위 폴더 Tests에 테스트 코드를 저장하여 어느 정도 분리하기는 했다. 그리고 전처리기 지시문 #if를 사용하여 Unit Test를 해야 할 때와 그렇지 않을 때(아마도 Release할 때)를 구분하도록 했다.

#if UNIT_TESTS
using System.Collections;
using System.Threading;

namespace Microsoft.Practices.EnterpriseLibrary.Common.Tests
{
  public abstract class ThreadStressFixtureBase
  {

  }

}

#endif UNIT_TESTS 

이런 식으로 구성하면 빌드할 때 경우에 따라 UNIT_TESTS를 지정하거나 해제하거나 해야 한다. 일반적으로 빌드 구성을 자주 바꾸는 것은 아니므로 이것은 그다지 문제되지 않을 수 있다.

결론

글을 쓰다 말고, 그 동안 이런저런 생각을 많이 해봤다. 분리하지 않는 경우에 있을 수 있는 문제점은 거의 관리 상의 문제들이다. 하지만 분리하지 않는다고 해서 크게 문제될 사항은 없는 것 같다. .config 파일을 어디에 둘 것인가 하는 문제가 마음에 걸리기는 하다. 프로젝트에 TestConfigurations라는 폴더를 하나 추가하고 그곳에 놓으면, 대상코드와 섞이는 일은 피할 수 있을 것 같다. ‘빌드 전 이벤트’에서 해당 .config 파일을 bin/debug 또는 bin/release 폴더에 복사하도록 하면 될 것이다.

단지 합치는 경우에는 그렇지 않은 경우보다 해야 할 일이 많을 것이다. (경험 상)

— 블로그 이전하기 전 코멘트

앤시스: 의외네요. PP팀의 방식은… ^^a 2005/03/18 20:14

쥐똥: 제 생각엔 프로젝트에 포함시키는 것이 나쁘지 않을 것 같습니다. 자바관점입니다. 자바 책이지만 TDDBE를 보면 그렇고, PP책의 start kit 인 cvs 등을 보아도 소스 관리차원의 대승론인가 싶습니다. 물론 님꼐서 말하는 소승론(제가 그냥 부쳐본 용어)도 분명 남을 이유가 있겠습니다. 2005/03/22 10:29

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments