-
기술을 적용하게된 배경
0.1 Arroval Test란?
0.2 도입배경
-
ApprovalTests
1.1 ApprovalTests 환경구성하기
1.2 ApprovalTests 실습하기
1.3 번외
-
coverlet-coverage
2.1 coverlet-coverage 환경 구성하기
2.2 coverlet-coverage 실습하기
2.3 번외
- Approval Test는 일반적인 Unit Test Framework가 사용하기 어렵다는 점을 보완하기 위하여 2008년경 Llewellyn Falcon이 만든 테스트 프레임워크
- 프로그램은 입력을 받아서 처리하고 출력을 내놓는 하나의 박스라는 가정에서 출발
- 출력을 사람이 읽을 수 있도록 문자화 해서 개발자가 직접 눈으로 확인
- 정상 출력이 맞다고 하면 expected값으로 채택하여 앞으로 수행하게 되는 테스트의 기준 값을 사용하게 되는 것
- 이런 일련의 과정을 승인 이라고 하는것
-
우선 테스트 코딩에 거부감이 많다.
-
어렵다는 생각이 처음부터 들고 부담감이 든다.
-
메소드 단위로 단윝테스트를 생성해야하는 번거로움이 있었다.
- 위를 도입을 하게 된다면, 승인된 정답지가 변하지 않는다는 과정하에
리팩토링으로 프로덕션코드의 수정이 진행되더라도 틀린 부분을 쉽게 찾을 수 있음
그렇기 때문에, 코드 수정을 하고 안전하고 쉽게 리팩토링이 제대로 되었는지 검증이 가능함
- 우선 새 프로젝트를 생성한다.
- .NET Framwork가 있는 클래스 라이브러리를 추가해줍니다.
- NuGet 패키지 관리 클릭
- ApprovalTests 검색해서 설치 진행
- xunit 검색해서 설치 진행
- xunit.runner.visualstudio 검색해서 설치 진행
- 단, xunit을 2.4.1버전을 설치 했기때문에 xunit.runner.visualstudio도 2.4.1버전을 맞춤
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: "");
}
}
}
- 테스트 탐색기가 보이지 않는다면 저렇게 테스트 -> 테스트 탐색기 클릭
- 위를 보면 이렇게 창이 뜨게되는데 그것은
- 소스에
[UseReporter(typeof(VisualStudioReporter))]
이것을 선언했기 때문이고
- 소스에
- 현재 테스트 결과가 Fail이 생긴 것은
- 쉽게 말하면 사진의 오른쪽 빈공간의 이름이 approved.txt로 되어있는데 그곳이 정답지라고 생각하면
- recelved.txt의 데이터와 같아야 성공이되는것이다.
- 처음에는 정답지가 없기 때문에 Fail이 나는것임
- 그래서 recelved.txt의 내용을 approved.txt로 복사해서 붙여넣고 다시 테스트를 해본다.
- 이렇게 해서 위와 같은 상태를 만들어주고 테스틀 결과를 확인해보면 아래와 같다.
- 위와 같이 성공한 결과를 얻을 수 있다.
- 위와 같이 approved.txt와 received.txt 라는 파일이 생성됨
- 지금까지는 비주얼 스튜디오 자체에서 비교할 수 있게 나왔는데 다른 툴을 이용하고 싶으면 아래와 같이 하면된다.
[UseReporter(typeof(VisualStudioReporter))] //비주얼스튜디오에서 확인
[UseReporter(typeof(WinMergeReporter))] //winmerge 프로그램설치되어 있으면 확인가능
- 이렇게 winmerge로 확인이 가능함
- 문서의 내용이 바뀔때만 창이 뜸
- approved로 정답파일이 있는 상태에서 리팩토링을 진행을 하더라도, 잘못된 로직을 바로 알 수 있다는 장점이 있음
- 데이터 자체를 확실히 검증가능함
- coverlet.msbuild 설치 진행
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;
}
}
}
dotnet test --collect:"XPlat Code Coverage"
- 이렇게 coverage를 확인 할 수 있음
- 위를 사용하면 더 직관적으로 code coverage를 확인 할 수 있음
- visual Studio 2019 기준으로 설치 가능
- 설치 진행
- Fine Code Coverage 클릭
- 저렇게 코드 커버리지를 확인할 수 있음