본문으로 건너뛰기
로그인 둘러보기
개발·코딩·데이터베이스 · 윈도우즈 유틸

Prig – Open Source Alternative to Microsoft Fakes

0

Prig(Prig는 PRototyping jIG의 약자)는 .NET 프레임워크를 위한 경량 테스트 더블 생성 프레임워크입니다.

.NET 테스트C# 테스트Microsoft Fakes 대안Visual Studio 확장단위 테스트모의 객체스텁테스트 프레임워크

소개

Prig(Prig는 PRototyping jIG의 약자)는 .NET 프레임워크를 위한 경량 테스트 더블 생성 프레임워크입니다. 이 프레임워크는 Microsoft Fakes, Typemock Isolator, Telerik JustMock과 유사하게, 관리되지 않는 프로파일러 API를 기반으로 정적 속성, 비가상 멤버 등 어떤 메서드든 모의 객체로 교체할 수 있게 합니다. 주로 Visual Studio 통합 환경에서 사용되며, 테스트하기 어려운 코드의 단위 테스트를 가능하게 합니다.

상세정보

범용적인 메서드 교체

Prig는 DateTime.Now와 같은 정적 속성, 비가상 멤버, private 메서드 등 거의 모든 유형의 메서드를 테스트 더블로 교체할 수 있습니다. 이를 통해 테스트하기 어려운 의존성을 격리하고 제어할 수 있습니다.

Visual Studio 통합

Visual Studio 확장(VSIX)으로 제공되어 개발 환경에 자연스럽게 통합됩니다. 메뉴를 통해 Prig 설정, 유도 설정 편집, 테스트 실행 등을 직관적으로 수행할 수 있습니다.

자동 코드 생성

Prig 설정 세션에서 특정 유형이나 메서드를 선택하면 해당 메서드의 유도 설정을 자동으로 생성합니다. 생성된 XML 설정 파일은 테스트 프로젝트에 추가되어 사용됩니다.

1단계: 스터프 설정 추가

테스트 프로젝트를 생성한 후, 프로젝트의 ‘참조’를 마우스 오른쪽 버튼으로 클릭하고 ‘Add Prig Assembly for mscorlib’를 선택합니다. 이렇게 하면 테스트 프로젝트에 스텁 설정 파일이 추가됩니다.

2단계: 유도 설정 생성 및 수정

추가된 스텁 설정 파일을 마우스 오른쪽 버튼으로 클릭하고 ‘Edit Prig Indirection Settings’를 선택하면 Prig 설정 세션이 시작됩니다. 이 세션에서 PowerShell 명령어를 사용하여 교체하고 싶은 메서드의 유도 설정을 생성할 수 있습니다.

예를 들어, DateTime.Now의 유도 설정을 생성하려면 다음 명령어를 실행합니다.

PS> $TargetReferencedAssembly.GetTypes() | ? { $_.Name -eq ‘datetime’ } | pfind -m ‘get_Now’ | pget | clip

생성된 설정을 스텁 설정 파일에 붙여 넣으면 됩니다.

3단계: 테스트 코드 작성

테스트 코드에서 Prig가 자동 생성한 PDateTime 같은 ‘Prig 타입’을 사용하여 메서드의 동작을 교체할 수 있습니다.

using (new IndirectionsContext())
{
  PDateTime.NowGet().Body = () => new DateTime(2013, 12, 13, 11, 00, 00);
  // 이제 DateTime.Now는 항상 2013/12/13 11:00:00을 반환합니다.
}

4단계: 테스트 실행기 설치 및 테스트 실행

Visual Studio 테스트 탐색기에서 테스트를 실행하려면 Prig 호환 테스트 실행기를 설치해야 합니다. 패키지 관리자 콘솔에서 다음 명령어를 실행합니다.

PM> Install-Package NUnitTestAdapterForPrig

테스트를 실행하기 전에 ‘PRIG – Enable Test Adapter for [프로젝트 이름]’ 메뉴를 선택하여 환경 변수를 설정해야 합니다.その後, 테스트 탐색기에서 테스트를 실행할 수 있습니다.

이런 경우에 유용합니다

  • 외부 환경에 의존하는 코드 테스트: DateTime.Now, 파일 시스템, 네트워크 요청 등 외부 상태에 의존하는 코드를 격리하여 테스트할 때 유용합니다.
  • 기존 코드 수정 없이 테스트: 프로덕션 코드를 수정하지 않고도 테스트 더블을 사용하여 의존성을 교체할 수 있습니다.
  • 단위 테스트 격리성 강화: 테스트 간의 의존성을 제거하고 격리된 환경에서 테스트를 실행하여 결과의 신뢰성을 높입니다.

지원 환경 및 시스템 요구사항

  • 개발 환경: Visual Studio 2013 이상(커뮤니티 에디션 이상, Visual Studio 2015 지원).
  • 필수 소프트웨어: PowerShell v3.0 이상.
  • Windows 7 사용 시: Windows Management Framework 3.0 이상을 사전에 설치해야 합니다.
  • 테스트 실행: NUnit, MSTest, xUnit.net 테스트 실행기를 지원하며, 각각 Prig 전용 어댑터가 필요합니다.

최신 버전 및 업데이트

현재 공개된 최신 버전은 2.3.2이며, 2017년 3월 12일에 릴리스되었습니다.

제한 사항 및 확인 사항

  • Prig를 사용하려면 Visual Studio를 관리자 권한으로 실행해야 합니다.
  • 공식 NUnit Test Adapter는 Prig와 호환되지 않으므로, Prig 전용 NUnitTestAdapterForPrig 패키지를 사용해야 합니다.
  • 테스트를 실행하기 전에 ‘PRIG – Enable Test Adapter’ 메뉴를 통해 환경 변수를 설정해야 합니다.
  • Windows 7 환경에서는 Windows Management Framework 3.0 이상이 필수입니다.

시스템 요구사항

Array