Skip to content

Latest commit

 

History

History
269 lines (162 loc) · 8.78 KB

2021.12.07_UnitTest(ApprovalTests,coverlet-coverage).md

File metadata and controls

269 lines (162 loc) · 8.78 KB

2021.12.07_UnitTest(ApprovalTests,coverlet-coverage)

목차

  1. 기술을 적용하게된 배경

    0.1 Arroval Test란?

    0.2 도입배경

  2. ApprovalTests

    1.1 ApprovalTests 환경구성하기

    1.2 ApprovalTests 실습하기

    1.3 번외

  3. coverlet-coverage

    2.1 coverlet-coverage 환경 구성하기

    2.2 coverlet-coverage 실습하기

    2.3 번외

0.기술을 적용하게된 배경

Arroval Test란?

  • Approval Test는 일반적인 Unit Test Framework가 사용하기 어렵다는 점을 보완하기 위하여 2008년경 Llewellyn Falcon이 만든 테스트 프레임워크
  • 프로그램은 입력을 받아서 처리하고 출력을 내놓는 하나의 박스라는 가정에서 출발
    • 출력을 사람이 읽을 수 있도록 문자화 해서 개발자가 직접 눈으로 확인
    • 정상 출력이 맞다고 하면 expected값으로 채택하여 앞으로 수행하게 되는 테스트의 기준 값을 사용하게 되는 것
      • 이런 일련의 과정을 승인 이라고 하는것

도입 배경

  • 우선 테스트 코딩에 거부감이 많다.

  • 어렵다는 생각이 처음부터 들고 부담감이 든다.

  • 메소드 단위로 단윝테스트를 생성해야하는 번거로움이 있었다.

    • 위를 도입을 하게 된다면, 승인된 정답지가 변하지 않는다는 과정하에

    리팩토링으로 프로덕션코드의 수정이 진행되더라도 틀린 부분을 쉽게 찾을 수 있음

    그렇기 때문에, 코드 수정을 하고 안전하고 쉽게 리팩토링이 제대로 되었는지 검증이 가능함

1. ApprovalTests

1.1 ApprovalTests 환경구성하기


새 프로젝트 생성

image-20211119092258625

  • 우선 새 프로젝트를 생성한다.

Test를 위한 클래스 생성하기

image-20211119092540456

클래스 라이브러리 추가

image-20211119092639691

  • .NET Framwork가 있는 클래스 라이브러리를 추가해줍니다.

image-20211119092906295

패키지 설치

image-20211119092932215

  • NuGet 패키지 관리 클릭

image-20211119093025346

  • ApprovalTests 검색해서 설치 진행

image-20211119093338633

  • xunit 검색해서 설치 진행

image-20211119093530052

  • xunit.runner.visualstudio 검색해서 설치 진행
  • 단, xunit을 2.4.1버전을 설치 했기때문에 xunit.runner.visualstudio도 2.4.1버전을 맞춤

1.2 ApprovalTests 실습하기


using ApprovalTests;
using ApprovalTests.Reporters;
using System;
using Xunit;

namespace UnitTest
{
    [UseReporter(typeof(VisualStudioReporter))]
    public class MargedRaw
    {
        [Fact]
        public void Verify()
        {
            var names = new[] { "Llewellyn", "James", "Dan", "Jason", "Katrina" };
            Array.Sort(names);
            Approvals.VerifyAll(names, label: "");
        }
    }
}

실행하기 전 폴더상태 확인

경로 : .\ApprovalTest\UnitTest

image-20211119094130125

테스트 실행

image-20211119094246237

  • 테스트 탐색기가 보이지 않는다면 저렇게 테스트 -> 테스트 탐색기 클릭

image-20211119094323345

테스트결과 확인

image-20211119094417579

  • 위를 보면 이렇게 창이 뜨게되는데 그것은
    • 소스에 [UseReporter(typeof(VisualStudioReporter))] 이것을 선언했기 때문이고

image-20211119094456258

  • 현재 테스트 결과가 Fail이 생긴 것은
    • 쉽게 말하면 사진의 오른쪽 빈공간의 이름이 approved.txt로 되어있는데 그곳이 정답지라고 생각하면
    • recelved.txt의 데이터와 같아야 성공이되는것이다.
    • 처음에는 정답지가 없기 때문에 Fail이 나는것임
    • 그래서 recelved.txt의 내용을 approved.txt로 복사해서 붙여넣고 다시 테스트를 해본다.

image-20211119094712318

  • 이렇게 해서 위와 같은 상태를 만들어주고 테스틀 결과를 확인해보면 아래와 같다.

image-20211119094751075

  • 위와 같이 성공한 결과를 얻을 수 있다.

이전 폴더 확인

image-20211119095349361

  • 위와 같이 approved.txt와 received.txt 라는 파일이 생성됨

1.3번외 (문서 비교시 사용하는 툴 변경)


  • 지금까지는 비주얼 스튜디오 자체에서 비교할 수 있게 나왔는데 다른 툴을 이용하고 싶으면 아래와 같이 하면된다.
[UseReporter(typeof(VisualStudioReporter))] //비주얼스튜디오에서 확인
[UseReporter(typeof(WinMergeReporter))] //winmerge 프로그램설치되어 있으면 확인가능

image-20211119101454760

  • 이렇게 winmerge로 확인이 가능함
  • 문서의 내용이 바뀔때만 창이 뜸

장점

  • approved로 정답파일이 있는 상태에서 리팩토링을 진행을 하더라도, 잘못된 로직을 바로 알 수 있다는 장점이 있음
  • 데이터 자체를 확실히 검증가능함

2. Coverlet-coverage

2.1 coverlet-coverage 환경 구성하기


xUnit 테스트 프로젝트 만들기

image-20211119102923421

패키지 설치

image-20211119103205036

  • coverlet.msbuild 설치 진행

2.2 coverlet-coverage 실습하기


소스코드 작성

using System;
using Xunit;

namespace TestProject1
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            Foo test = new Foo();
            Assert.Equal(4,test.Add(1, 3));
        }
    }
    public class Foo
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
    }
}

해당 파일 경로로 명령프롬프트창 켜기

image-20211119103628603

image-20211119103645732

명령어 실행

dotnet test --collect:"XPlat Code Coverage"

image-20211119103813188

  • 이렇게 coverage를 확인 할 수 있음

2.3번외


image-20211119104058448

  • 위를 사용하면 더 직관적으로 code coverage를 확인 할 수 있음
  • visual Studio 2019 기준으로 설치 가능

image-20211119104320512

  • 설치 진행

image-20211119105236440

  • Fine Code Coverage 클릭

image-20211119105344376

  • 저렇게 코드 커버리지를 확인할 수 있음