http://neovader.tistory.com/110
Visual Studio의 테스트 기능을 활용하여 단위 테스트를 만들어 보겠습니다.
새 프로젝트를 선택합니다.
기타 프로젝트 형식 > Visual Studio 솔루션의 빈 솔루션을 선택하고 이름을 작성합니다.
새 프로젝트를 추가합니다.
Visual C# > Windows > 클래스 라이브러리 선택 후 이름을 입력하고 확인버튼을 클릭합니다.
솔루션 탐색기에서 Class1.cs 파일을 찾아서 Basics.cs로 파일명을 변경합니다.
Basics.cs를 다음과 같이 작성합니다.
namespace CoolMath
{
public class Basics
{
public int Add(int i, int j)
{
return i + j;
}
public int Subtract(int i, int j)
{
return i - j;
}
public int Multiply(int i, int j)
{
return i * j;
}
public int Divide(int i, int j)
{
return i / j;
}
}
}
그림과 같이 마우스 오른쪽 버튼 클릭 후 단위 테스트 만들기를 선택합니다.
단위 테스트 만들기 창이 나타나면, 체크박스를 그림과 같이 모두 체크하고 확인 버튼을 클릭하니다.
프로젝트 이름을 입력 후 만들기 버튼 클릭합니다.
솔루션 탐색기에 그림과 같이 테스트 프로젝트가 추가됩니다.
BasicsTest.cs를 다음과 같이 작성합니다.
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace CoolMath
{
[TestClass()]
public class BasicsTest
{
[TestMethod()]
public void Add_0_and_0_Expert_0()
{
Basics mathBasics = new Basics();
Assert.AreEqual(0, mathBasics.Add(0, 0));
}
[TestMethod()]
public void Add_1_and_1_Expert_2()
{
Basics mathBasics = new Basics();
Assert.AreEqual(2, mathBasics.Add(1, 1));
}
[TestMethod()]
public void Add_0_and_IntMaxValue_Expert_IntMaxValue()
{
Basics mathBasics = new Basics();
Assert.AreEqual(int.MaxValue, mathBasics.Add(0, int.MaxValue));
}
[TestMethod()]
public void subtract_1_from_2_Expert_1()
{
Basics mathBasics = new Basics();
Assert.AreEqual(1, mathBasics.Subtract(2, 1));
}
[TestMethod()]
public void Subtract_0_from_IntMaxValue_Expert_IntMaxValue()
{
Basics mathBasics = new Basics();
Assert.AreEqual(int.MaxValue, mathBasics.Subtract(int.MaxValue, 0));
}
[TestMethod()]
public void Multiply_11_and_11_Expert_121()
{
Basics mathBasics = new Basics();
Assert.AreEqual(121, mathBasics.Multiply(11, 11));
}
[TestMethod()]
public void Multiply_7_and_0_Expert_0()
{
Basics mathBasics = new Basics();
Assert.AreEqual(0, mathBasics.Multiply(7, 0));
}
[TestMethod()]
public void Divide_121_by_11_Expert_11()
{
Basics mathBasics = new Basics();
Assert.AreEqual(11, mathBasics.Divide(121, 11));
}
[TestMethod()]
[ExpectedException(typeof(System.ApplicationException))]
public void Divide_7_by_0_Expect_Exception()
{
Basics mathBasics = new Basics();
mathBasics.Divide(7, 0);
}
}
}
그림과 같이 테스트 뷰를 선택합니다.
그림과 같이 테스트 뷰가 표시됩니다. 모두 선택 후 실행 버튼을 클릭합니다.
테스트 결과 창에 결과가 표시됩니다.
1건의 테스트가 실패되었기 때문에 결과는 테스트 실행 실패이며, 실패한 항목의 오류 메시지도 표시됩니다. 실패한 항목을 더블 클릭하면 자세한 내용을 볼 수 있습니다.
12
오류 메시지는 테스트 메소드가 System.ApplicationException을 예상했지만, System.DivideByZeroException이 throw됐다는 내용입니다.
오류 스택 추적에서 테스트 메소드와 실제 메소드의 오류가 발생한 곳이 표시되며, 따라가서, 소스를 수정할 수 있습니다.
테스트 메소드를 수정하여 System.ApplicationException으로 예상한 것을 System.DivideByZeroException으로 예상하도록 변경할 수 있습니다.
[TestMethod()]
[ExpectedException(typeof(System.DivideByZeroException))]
public void Divide_7_by_0_Expect_Exception()
{
Basics mathBasics = new Basics();
mathBasics.Divide(7, 0);
}
아니면, 실제 메소드를 수정하여 테스트 수행 결과의 예상 값에 맞도록 수정할 수도 있습니다.
public int Divide(int i, int j)
{
if (j == 0)
{
throw new System.ApplicationException("0으로 나눌 수 없습니다.");
}
return i / j;
}
둘 중 하나를 수정하여 다시 빌드 후, 테스트를 수행하면 다음과 같이 통과가 됨을 알 수 있습니다.
이것은 간단한 예였지만, 이러한 테스트 코드가 지속적으로 관리되고, 소프트웨어가 계속적으로 변경된다면, 수정 후 기존 테스트 코드를 활용하여 회귀 테스트를 자동화 할 수 있습니다. 그렇게 된다면, 소스 수정으로 인한 예상하지 못했던 오류를 미연에 방지할 수있습니다.
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
게임 오브젝트 설계 #4 - 메시지 통신(messaging) (0) | 2015.07.05 |
---|---|
게임 오브젝트 설계 #3 - 컴포넌트 기반 설계(component based) (0) | 2015.07.05 |
singlegon [싱글톤 파헤치기] (0) | 2012.11.16 |
visualstudio2010 의 UML (0) | 2012.11.02 |
아키텍처/프레임 워크/플랫 폼에 관한 정의 (0) | 2012.11.02 |