반응형

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;
        } 

둘 중 하나를 수정하여 다시 빌드 후, 테스트를 수행하면 다음과 같이 통과가 됨을 알 수 있습니다.

이것은 간단한 예였지만이러한 테스트 코드가 지속적으로 관리되고소프트웨어가 계속적으로 변경된다면수정  기존 테스트 코드를 활용하여 회귀 테스트를 자동화   있습니다그렇게 된다면소스 수정으로 인한 예상하지 못했던 오류를 미연에 방지할 있습니다.

반응형

+ Recent posts