728x90
📘 Chapter 2.8.1: MSTest 완전정복 – 기본부터 실전 예제까지
✅ 이 챕터에서 확실하게 배울 것
- MSTest란 무엇인가?
- xUnit과 구조적으로 뭐가 다른가?
- MSTest 프로젝트 생성 및 설정
- [TestClass], [TestMethod]의 의미
- Assert 사용법
- 데이터 기반 테스트 ([DataRow])
- MSTest에서 Mock 사용하기 (Moq 연동)
1️⃣ MSTest란?
Microsoft에서 공식 제공하는 단위 테스트 프레임워크
- ✅ Visual Studio 통합성 최강
- ✅ Attribute 기반 구조
- ✅ .NET Framework 시절부터 쭉 사용됨
- ✅ 안정성, 호환성 좋음
- ✅ 실무에서 여전히 많이 씀
2️⃣ MSTest vs xUnit 한눈 정리
항목 | MSTest | xUnit |
---|---|---|
프로젝트 템플릿 | mstest | xunit |
테스트 어노테이션 | [TestMethod] | [Fact] |
클래스 지정 | [TestClass] 필요 | 필요 없음 |
Assertion | Assert.AreEqual() 등 | Assert.Equal() 등 |
속성 방식 | Attribute 기반 | Attribute + 확장성 |
✅ 두 프레임워크 다 강력함. 단지 스타일 차이.
3️⃣ MSTest 프로젝트 생성
dotnet new mstest -n MyApp.MSTests
cd MyApp.MSTests
dotnet add reference ../MyApp/MyApp.csproj
- ✅ 생성되면 UnitTest1.cs 기본 포함됨
- ✅ 모든 테스트 클래스는 [TestClass] 달아야 인식됨
4️⃣ 기본 테스트 예제
🔧 테스트 대상 클래스
public class Calculator
{
public int Add(int a, int b) => a + b;
}
✅ MSTest 코드
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_두수를_더하면_정상결과나와야함()
{
// Arrange
var calc = new Calculator();
// Act
int result = calc.Add(3, 5);
// Assert
Assert.AreEqual(8, result);
}
}
- ✅
[TestClass]
+[TestMethod]
가 필수 - ✅ 메서드 이름 자유롭게 쓰면 됨!
5️⃣ 다양한 Assert 정리
메서드 | 설명 |
---|---|
Assert.AreEqual(expected, actual) | 값 비교 |
Assert.IsTrue(condition) | 조건 만족 |
Assert.IsNotNull(obj) | null 아님 확인 |
Assert.ThrowsException() | 예외 발생 확인 |
💥 예외 확인 예제
[TestMethod]
public void Divide_By_Zero_예외발생()
{
var calc = new Calculator();
Assert.ThrowsException<DivideByZeroException>(() =>
{
calc.Divide(10, 0);
});
}
6️⃣ 데이터 기반 테스트 (DataRow)
[TestMethod]
[DataRow(2, 3, 6)]
[DataRow(0, 100, 0)]
[DataRow(5, 5, 25)]
public void Multiply_테스트(int a, int b, int expected)
{
var calc = new Calculator();
int result = calc.Multiply(a, b);
Assert.AreEqual(expected, result);
}
- ✅
[DataRow]
붙이면 자동으로 여러 입력값으로 반복 테스트 가능 - ✅
[TestMethod]
랑 같이 써야 함
7️⃣ 의존성 테스트 – Moq 연동
📌 인터페이스 예제
public interface IEmailService
{
void Send(string email);
}
📌 대상 클래스
public class UserService
{
private readonly IEmailService _email;
public UserService(IEmailService email)
{
_email = email;
}
public bool Register(string email)
{
_email.Send(email);
return true;
}
}
📦 Moq 설치
dotnet add package Moq
✅ MSTest에서 Mock 사용
[TestClass]
public class UserServiceTests
{
[TestMethod]
public void Register_이메일_전송되어야함()
{
// Arrange
var mock = new Mock<IEmailService>();
var service = new UserService(mock.Object);
// Act
var result = service.Register("test@example.com");
// Assert
mock.Verify(e => e.Send("test@example.com"), Times.Once());
Assert.IsTrue(result);
}
}
- ✅ xUnit과 완전히 같은 방식으로 Moq 쓸 수 있다
- ✅ Assert 방식만 다름 (
Assert.IsTrue
,AreEqual
등)
✅ MSTest 실무 팁
상황 | 추천 |
---|---|
Visual Studio 중심 개발 | MSTest 유리 |
.NET Framework 프로젝트 | MSTest 기본 |
빠르게 배우고 쓰기 | xUnit 직관적이지만 MSTest도 충분히 강력 |
팀에서 이미 쓰고 있음 | 팀 룰 따르자 (MSTest 많이 씀!) |
✅ 최종 요약
항목 | 요약 |
---|---|
MSTest 구조 | [TestClass] + [TestMethod] |
데이터 테스트 | [DataRow] |
Assertion | Assert.AreEqual, IsTrue, ThrowsException |
Mock | Moq 연동 가능 (xUnit과 동일) |
📢 다음 챕터 예고 🎓
다음 챕터 | 주제 |
---|---|
Chapter 2.9 | 인터페이스 활용 – 다형성 실전 예제 |
✋ 제자야!
이제:
- xUnit vs MSTest 차이도 머리에 딱 정리됐고
- Mock 예제도 실전 감각으로 익혔다면
바로 다음 챕터 2.9로 갈지?
아니면 Moq 쪽 더 심화해볼지?
외쳐라! 가보자 or 더 줘보자!
장선생 바로 따라간다잉 😎🔥
728x90