ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# UnitTest 사용하기 (MsTest)
    프로그래밍/C# 2021. 3. 22. 19:21

     Test 환경 구축하기

     

    솔루션 우클릭 -> 추가 -> 새프로젝트

     

     

    테스트 검색 -> 단위 테스트 프로젝트로 프로젝트 생성

     

     

    UnitTestProject 종속성 클릭 -> 프로젝트 우클릭 -> 참조추가 -> 테스트할 프로젝트 추가

     

     

     

     기본적인 구성

     

    프로젝트 이름으로 된 .cs 파일을 열면 이러한 코드가 보입니다.

    기본적인 C# 의 셋팅과의 차이는 이름 위에 [TestClass], [TestMethod] 라는 코드인데요. 이건 MsTest 에서 제공되는 특성(Attribute) 입니다.  말 그대로 저걸 클래스명 또는 메소드명 위에 적어주면, 이 코드뭉치는 테스트 코드로 사용할 것이라는 의미입니다.

     

     

     

    이제 테스트용 메소드를 구현할 건데, 여기서 이름을 먼저 보겠습니다. 이름은 보시는것처럼 테스트하려는 메소드의 이름, 간략한 시나리오 그리고 예상되는 결과값으로 작성해주시며 됩니다. 이렇게 안해도 당연히 돌아가지만, 약속정도로 생각하시면 됩니다.안에 내용은 Arrange, Act, Assert 세가지로 구성이 됩니다. 

     

    Arrange : 테스트할 메소드를 인스턴스 해 줍니다.

    Act : 테스트할 시나리오를 구현합니다.

    Assert : 예상 값과 일치하는지 확인합니다.

     

     

     

    예약을 하는 프로그램의 예시입니다.

    해당 메소드는 사용자가 해당 예약을 취소할 수 있는지 없는지 bool 자료형을 반환하는 함수입니다.

     

    Arrange : 해당 클래스를 인스턴스

    Act : 취소하려는 유저가 주인인 상황 구현

    Assert : 결괏값이 True 인지 확인

     

     

     

     

     

     

     예제 코드

    코드의 클래스는 ReservationTest.csUnitTest.cs 로 구성되어 있습니다. .cs 파일에 복사해서 테스트 해보시면 어떤식으로 구동이 되는지 알 수 있습니다. 테스트 방법은 상단에 테스트 -> 모든 테스트 실행 을 통해서 해볼수 있습니다.

     

    여기서는 MsTest 의 극히 일부기능만을 소개해드렸지만, 이정도 기본 구성을 알고 시작하시면 입문하시는데 큰 도움이 되실거라 생각 됩니다. ㅎㅎ

     

    ReservationTest.cs

    using System;
    namespace ConsoleApp1
    {
        public class ReservationTest
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
    
            public User reservedUser { get; set; }
    
            public bool canBeCanceledBy(User user)
            {
                if (user.isAdmin == true)
                    return true;
    
                if (user == reservedUser)
                    return true;
    
                return false;
            }
    
        }
    
        public class User
        {
            public bool isAdmin;
    
            public User(bool isAdmin)
            {
                this.isAdmin = isAdmin;
            }
        }
    
    }
    

     

     

    UnitTest.cs

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System;
    using ConsoleApp1;
    
    namespace UnitTestProject
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod] // Method_scenario_expectedReturnVaule
            public void canBeCanceledBy_UserIsAdmin_returnsTrue()
            {
                // Arrange
                var reservation = new ReservationTest();
    
                // Act
                var result = reservation.canBeCanceledBy(new User(true));
                Console.WriteLine("유저가 주인인 경우 테스트");
    
                // Assert
                Assert.IsTrue(result);
            }
    
            [TestMethod]
            public void canBeCanceledBy_SameUser_returnsTrue()
            {
                // Arrange
                User reservedUser = new User(false);
                var reservation = new ReservationTest { reservedUser = reservedUser };
    
                // Act
                var result = reservation.canBeCanceledBy(reservedUser);
                Console.WriteLine("유저가 본인인 경우 테스트");
    
                // Assert
                Assert.IsTrue(result);
    
            }
    
            [TestMethod]
            public void canBeCanceledBy_AnotherUser_returnsFalse()
            {
                // Arrange
                User reservedUser = new User(false);
                var reservation = new ReservationTest { reservedUser = reservedUser };
    
                // Act
                var result = reservation.canBeCanceledBy(new User(false));
                Console.WriteLine("다른 유저가 취소하는 경우 테스트");
    
                // Assert
                Assert.IsFalse (result);
    
            }
        }
    }
    

     

    댓글

Designed by Tistory.