Visual Studio 2017 가 공식 출시되었습니다. 새롭고 멋진 기능이 많이 포함되어 있지만, 제가 가장 좋아하는 새로운 기능 중 하나는 Visual Studio 라이브 유닛 테스트가 기본 제공된다는 점입니다(Visual Studio 2017 Enterprise에서 사용 가능, 아직 .NET Core 프로젝트에는 제공되지 않음).

이 글에서는 Visual Studio 라이브 유닛 테스트의 작동 방식과 유닛 테스트 사용 대 통합 테스트. 이에 대한 전체 소스 코드를 얻어서 따라할 수 있습니다. GitHub의 라이브 유닛 테스트 예제.

NUnit을 사용한 Visual Studio 라이브 유닛 테스트

NUnit은 아마도 C#/.NET 개발자들에게 가장 인기 있는 테스트 도구일 것입니다. Visual Studio 라이브 유닛 테스트는 xUnit 및 MSTest와도 함께 사용할 수 있지만 이 포스팅에서는 NUnit만 다루겠습니다.

NUnit을 사용하려면 평소와 마찬가지로 NuGet을 사용하여 추가합니다. Visual Studio 라이브 테스트를 사용하려면, 또한 NUnit 테스트 어댑터 (설치-패키지 NUnite3TestAdapter).

그런 다음 테스트 → 라이브 단위 테스트 → 시작을 클릭하여 라이브 테스트를 시작합니다.

Start Visual Studio Live Unit Testing

단위 테스트 작성

데모를 위해 몇 가지 단위 테스트가 필요합니다. 다음과 같이 할 수 있습니다. Assert.That(1, Is.EqualTo(1))하지만 그게 무슨 재미가 있을까요? 쇼핑 카트 클래스를 만들어 보겠습니다.

이 쇼핑 카트에는 몇 가지 속성과 그 안에 있는 항목 컬렉션이 있습니다. 주목하세요. 합계 속성에 대해 알아봅시다. 눈치 빠른 독자라면 이미 몇 가지 문제를 발견했을 수도 있지만, 간단한 단위 테스트부터 시작하여 합계를 계산하는지 확인해 보겠습니다.

라이브 유닛 테스트가 켜져 있으면 테스트가 Visual Studio에 의해 백그라운드에서 자동으로 실행됩니다. 녹색 확인 표시가 나타납니다.

Visual Studio Live Unit Testing in action

테스트 중인 코드가 있는 곳에는 녹색 확인 표시도 나타납니다.

Visual Studio Live Unit Testing code under test

Visual Studio 라이브 유닛 테스트를 사용하면 테스트를 실행하기 위해 멈출 필요가 없습니다. 코딩하는 동안 테스트가 실행되고 코드가 테스트를 실패하게 만드는지(또는 테스트를 통과하기에 충분한 코드를 작성했는지) 즉각적인 피드백을 제공합니다.

무엇보다도 이렇게 하면 더 많은 테스트를 작성할 수 있습니다.

통합 테스트란 무엇인가요?

단위 테스트를 작성할 때는 작은 코드 조각을 자체적으로 테스트해야 합니다. 외부 서비스(웹 서비스, 데이터베이스, 파일 시스템 등)와 상호 작용하는 코드의 경우, 단위 테스트에 집중할 수 있도록 해당 부분을 모의 테스트하는 경우가 많습니다.

NUnit으로 통합 테스트를 작성할 수도 있습니다. 통합 테스트는 단일 코드 단위를 테스트하는 것을 넘어 시스템이 함께 작동하는지 테스트하기 위한 것입니다. Couchbase Server에 레코드를 쓰는 메서드를 작성해 보겠습니다. 이 테스트는 실제 데이터베이스를 사용하므로 통합 테스트라고 할 수 있습니다.

이 메서드는 장바구니를 Couchbase Server의 문서에 저장해야 합니다. 작동하는지 확인하기 위해 NUnit 테스트를 작성할 수 있습니다.

참고: 이 포스팅을 간결하게 하기 위해 일부 리포지토리 세부 사항과 테스트 설정은 생략했습니다. 이 모든 내용은 다음에서 확인할 수 있습니다. GitHub 리포지토리.

Visual Studio 라이브 유닛 테스트를 통한 통합 테스트

Visual Studio 라이브 유닛 테스트는 이 유닛 테스트를 기꺼이 실행합니다. 이러한 유형의 테스트가 백그라운드에서 자동으로 실행되는 것을 원하지 않을 수도 있습니다:

  1. 카우치베이스 서버가 설치되어 있지 않거나 생성 및 색인된 버킷이 없는 경우 실패합니다.
  2. 외부 구성 요소에 의존하는 테스트가 많은 경우 테스트 속도가 느려질 수 있습니다(Couchbase에서 문서 읽기/쓰기는 매우 빠르지만 클러스터 객체가 아닌 각 테스트 또는 테스트 고정물에 대한 객체).
  3. 이러한 테스트는 데이터베이스에 불필요한 정크 테스트 데이터를 많이 추가할 수 있습니다.

Visual Studio 라이브 유닛 테스트에서 통합 테스트 제외하기

라이브 유닛 테스트에서 테스트를 제외하려면 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 '제외'를 선택하면 됩니다.

Exclude from Live Unit Testing

이 후에는 해당 파일의 어떤 테스트도 라이브 단위 테스트에 의해 실행되지 않습니다. 전체 프로젝트를 제외할 수도 있습니다. 따라서 단위 테스트와 통합 테스트를 별도의 프로젝트로 구성하면 모든 준비가 완료됩니다.

다음과 같은 경우 하지 마십시오. 별도의 프로젝트로 정리하는 경우 이 과정이 다소 지루할 수 있습니다. 또한 포함/제외 정보는 (이 글을 쓰고 있는 현재 제가 아는 한) 소스 제어에 커밋할 수 없는 로컬 설정입니다.

따라서 다음 사항에 대해 문의한 후 스택오버플로우에서 라이브 테스트 제외를 사용하여 테스트에 배치하여 라이브 테스트에서 제외할 수 있는 속성을 만들었습니다.

이 속성은 ITestAction 인터페이스(NUnit용 측면 지향 프로그래밍/AOP와 비슷하지만, 이는 다른 블로그 게시물에서 다룰 주제입니다)를 사용합니다. 이 인터페이스가 실행되고 있는지 확인합니다. 라이브 유닛 테스트 프로세스를 확인합니다. 이 경우 NUnit에 테스트를 무시하도록 지시합니다.

또한 옵션으로 무시이유 를 생성자에 추가하여 팀의 다른 사람들에게 이 테스트를 라이브 유닛 테스트로 실행해서는 안 되는 이유를 설명하는 유용한 메모를 추가할 수 있습니다. 통합 테스트에서 다음과 같이 사용할 수 있습니다:

요약

이 방법은 NUnit에 한정되어 있고, 제가 기대했던 것과는 완전히 다른 Visual Studio 라이브 유닛 테스트이기 때문에 그다지 만족스럽지는 않습니다. 하지만 지금은 "그만한 가치가 있다"고 생각합니다. 라이브 유닛 테스트는 코드 작성, 특히 테스트 중심 개발(TDD)에 매우 유용한 기능이기 때문에 특별한 NUnit 속성을 작성하고 사용하는 것이 가치가 있습니다.

더 좋은 방법을 알고 계신다면 꼭 알려주세요. 아래에 댓글을 남기거나 다음 주소로 핑을 보내주세요. 트위터 @mgroves.

이 게시물에서 본 Couchbase 코드에 대해 궁금한 점이 있으면 기꺼이 도와드리겠습니다. 또는 반응이 빠르고 지식이 풍부한 커뮤니티를 확인하실 수 있습니다. 카우치베이스 .NET SDK 포럼. Couchbase에 대해 더 자세히 알아보려면 카우치베이스 개발자 포털.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.