📕 xUnit?
C# .NET 테스트 자동화 툴입니다.
근데 솔직히 아직 뭐가 좋은지 모르겠음 집계해주는거 ? 병렬로 해주는거? 이건 그냥 라이브러리 안쓰고도 할 수 있지 않나
🖼️ 환경 설정
1. 테스트 솔루션 생성
테스트를 하기 위해, 공식 문서의 예제 파일을 생성하는 방법입니다. ( 출처 : xUnit 공식문서 )
dotnet new install xunit.v3.templates
dotnet new xunit3
쉘에 위 스크립트를 실행시키면, 아래와 같이 솔루션 파일이 생겨납니다.
2. 현재 솔루션에 xUnit 적용
개발된 솔루션에 xUnit만 추가하는 방법입니다.
xUnit을 추가할 프로젝트의 csproj 파일을 텍스트 뷰어로 열어줍니다.
저는 위와 같이 나오네요.
솔루션 파일의 <Project> 태그 안쪽에 아래 코드를 추가합니다.
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="xunit.v3" Version="0.6.0-pre.7" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0-pre.49" />
</ItemGroup>
이렇게 추가하고 나면, Main문을 작성할 수 없으며, 프로젝트를 실행하면 xUnit이 작동합니다.
🛠️ 사용 방법
우선 테스트할 클래스를 준비했습니다.
public class Calculator
{
public int Add(int value1, int value2)
{
return value1 + value2;
}
}
1. 테스트에 매개 변수를 안 넣어도 되는 경우
Fact 프로퍼티를 사용하여, 아래와 같이 확인합니다.
[Fact]
public void CanAdd()
{
var calculator = new Calculator();
var result = calculator.Add(1, 2);
Assert.Equal(3, result);
}
2. 테스트에 매개 변수가 필요한 경우
Theory 프로퍼티와 InlineData 프로퍼티를 사용합니다.
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-4, -6, -10)]
[InlineData(-2, 2, 0)]
[InlineData(int.MinValue, -1, int.MaxValue)]
public void CanAddTheory(int value1, int value2, int expected)
{
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
3. 매개 변수를 IEnumerable Class 로 넣는 경우
ClassData 프로퍼티를 사용합니다. 아래와 같이 테스트 데이터가 입력된 클래스를 생성합니다.
public class CalculatorTestData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { 1, 2, 3 };
yield return new object[] { -4, -6, -10 };
yield return new object[] { -2, 2, 0 };
yield return new object[] { int.MinValue, -1, int.MaxValue };
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
아래와 같이 테스트 코드를 작성합니다.
[Theory]
[ClassData(typeof(CalculatorTestData))]
public void CanAddTheoryClassData(int value1, int value2, int expected)
{
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
4. 매개 변수를 List로 넣는 경우
MemberData 프로퍼티를 사용합니다.
[Theory]
[MemberData(nameof(Data))]
public void CanAddTheoryMemberDataProperty(int value1, int value2, int expected)
{
var calculator = new Calculator();
var result = calculator.Add(value1, value2);
Assert.Equal(expected, result);
}
public static IEnumerable<object[]> Data =>
new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -4, -6, -10 },
new object[] { -2, 2, 0 },
new object[] { int.MinValue, -1, int.MaxValue },
};
5. 테스트의 순서를 지정해야 하는 경우
Order 프로퍼티를 적용하여 순서를 정의합니다.
[Fact, Order(2)]
public void TestB()
{
Assert.True(true);
}
[Fact, Order(1)]
public void TestA()
{
Assert.True(true);
}
[Fact, Order(3)]
public void TestC()
{
Assert.True(true);
}
참고자료
'Server > C#' 카테고리의 다른 글
안정적인 서버를 구현하기 위한 잡지식 (0) | 2024.03.22 |
---|---|
SemaphoreSlim (1) | 2024.01.02 |
맨날 헷갈리는 상속 오버라이딩 정리 (0) | 2024.01.02 |
딕셔너리 vs 해시테이블 (2) | 2023.11.28 |
진짜 오랫동안 삽질했던, 프로그램 비정상 종료 대처법 (0) | 2023.10.11 |