NUnit에서 자체 제작 클래스의 단원 테스트를 진행합니다

18241 단어 C#NUnit
아저씨도 깜짝 놀랄 단원 테스트 한번 해보세요.
단원 쓰기 테스트를 통해 머릿속으로 규격을 정리하면서 가장 짧은 거리에 안심하고 설치·유지보수한다.
비망록도 필기를 겸하다.
속성 및 AssertEqual()로 테스트 방법을 기억하면 테스트를 쓸 수 있을 것 같네요.
내가 좋아하는 SharpDevelop4.0에서는 [TestCase] 속성이 트리에 나타나지 않기 때문에 NUnit-Gui를 사용합니다.
개요
테스트 객체의 프로젝트 이름은 여기서 "RenameAlignDigit"입니다.
  • NUnit 설치

  • 단원 테스트용 프로젝트'~Test'제작
  • RenameAlignDigit(테스트 항목)
  • RenameAlignDigitTest(유닛 테스트용 항목)

  • RenameAlignDigitTest에 추가된 참조
  • nunit.framework.dll(NUnit DLL)
  • RenameAlignDigit(테스트 대상 항목)

  • Public이 아닌 방법을 테스트하려면 다음과 같은 설정이 필요하다
  • 테스트자 "RenameAlignDigit"의 AsseemblyInfo.cs에 InternaleVisibleTo("RenameAlignDigitTest") 속성 추가

  • 테스트할 방법에 대한 테스트 방법을 적으세요.
  • 신규 생성 추가 -> 유닛 테스트
  • [Test] 속성이 있는 메서드를 씁니다. 여기서...
  • Assert.Equal(기대치, 실제치);

  • NUnit-Gui로부터 테스트 수행
  • RenameAlignDigitTest.Dll 불러오기
  • Run 확인 테스트 결과
  • 디테일
    1. NUnit 설치
    나는 별다른 점이 없다고 생각해서 생략했다.
    그나저나'win NUnit-2.6.1ms'를 설치했다.

  • NUnit - Download에서 다운로드
  • 설치 시 Typical 선택에 문제가 없음
  • 2. 유닛 테스트용 프로젝트'~Test'제작
    테스트 대상의 항목은 이것이다.

    ClassMyCompare.cs
    using System;
    
    namespace Rohinomiya
    {
        public class MyCompare
        {
            public MyCompare()
            {
            }
    
            /// <summary>
            /// 数値 current がlower ~ higher の範囲内か?       
            /// </summary>
            /// <param name="lower">区間(開始)</param>
            /// <param name="current">比較される値</param>
            /// <param name="higher">区間(終了)</param>
            /// <param name="inclusive">閉区間か?(境界値を含む) (初期値:true)</param>
            /// <returns>範囲内であればtrue</returns>
            public static bool Between(int lower, int current, int higher, bool inclusive = true)
            {
                if(lower > higher) Swap(ref lower,ref higher);
    
                return inclusive ?
                    (lower <= current && current <= higher) :
                    (lower <  current && current <  higher);
            }
    
            /// <summary>
            /// 2つの値を交換する
            /// </summary>
            /// <param name="a">値A</param>
            /// <param name="b">値B</param>
            public static void Swap(ref int a, ref int b)
            {
                int temp = a;
                a = b;
                b = temp;
            }
        }
    }
    
    이 새 단원 테스트용 항목을 만듭니다.
  • NUnit-Gui에서 사용하기 위해서입니다.DLL로 생성됩니다.
  • 원래 프로젝트 이름 뒤에'~Test'
  • 를 붙인다
    새 프로젝트 -> 라이브러리 선택 -> 프로젝트 이름 = RenameAlignDigitTest
    3. 2.참조 추가
    프로젝트 "RenameAlignDigitTest"에 다음 참조를 추가합니다.

  • nunit.framework.dll(NUnit DLL)
    참조 추가 ->NET 어셈블리 탐색기 -> 참조 -> nuit.framework.dll 지정(C:\Program Files\NUnit...\bin\ramework\nunit.frame work.dll)

  • RenameAlignDigit(테스트 객체 항목)
    참조 추가 -> 엔지니어링 -> RenameAlignDigit

  • 4. InternalVisibleTo 구성 요소 속성 증가
    Public이 아닌 방법을 테스트하려면 다음과 같은 설정이 필요합니다.
  • 테스트자 "RenameAlignDigit"의 AsseemblyInfo.cs에 InternaleVisibleTo("RenameAlignDigitTest") 속성 추가
  • AssemblyInfo.cs
    using System.Runtime.CompilerServices;
    
    [assembly: InternalsVisibleTo("RenameAlignDigitTest")]
    
    Rename Align Digit Test라면 보여줄 수 있어요.
    5. 테스트 방법 쓰기
  • 테스트하고자 하는 방법에 대응하는 테스트 방법을 쓴다.
  • 테스트 방법 이름 + "Test"
  • [Test] 속성으로 1방법1 테스트를 진행합니다.
  • [TestCase] 속성으로 매개 변수를 쓰면 이 모드의 테스트를 반복합니다.이거 편해요.
  • Assert.Areaqual(예상치 실행 결과);테스트
  • Assert류는 다른 테스트용 방법도 많지만, 이를 최소한으로 기억할 수 있다면 테스트를 기술할 수 있다.
  • ClassMyCompareTest.cs
    using System;
    using NUnit.Framework;
    
    namespace Rohinomiya
    {
        [TestFixture]
        public class MyCompareTest
        {
    //      [Test]
    //      public void SwapTest()
    //      {
    //          int a = 3;
    //          int b = 5;
    //          
    //          MyCompare.Swap(ref a,ref b);
    //          Assert.AreEqual(5,a);
    //          Assert.AreEqual(3,b);
    //          
    //          a = -1;
    //          b = 0;
    //          
    //          MyCompare.Swap(ref a,ref b);
    //          Assert.AreEqual(0,a);
    //          Assert.AreEqual(-1,b);
    //      }
    
            [TestCase(3,5,5,3)]
            [TestCase(-1,0,0,-1)]
            public void SwapTest(int expectedA, int expectedB, int a, int b)
            {
                MyCompare.Swap(ref a,ref b);
    
                Assert.AreEqual(expectedA,a);
                Assert.AreEqual(expectedB,b);
            }
    
    //      [Test]
    //      public void BetweenTest()
    //      {
    //          Assert.AreEqual(true,MyCompare.Between(1,2,3));
    //          Assert.AreEqual(true,MyCompare.Between(1,3,3));
    //          Assert.AreEqual(true,MyCompare.Between(1,1,3));
    //          
    //          Assert.AreEqual(false,MyCompare.Between(1,1,3,false));
    //          Assert.AreEqual(false,MyCompare.Between(1,3,3,false));
    //          Assert.AreEqual(true,MyCompare.Between(1,2,3,false));
    //
    //          Assert.AreEqual(true,MyCompare.Between(3,2,1));
    //          Assert.AreEqual(true,MyCompare.Between(3,3,1));
    //          Assert.AreEqual(true,MyCompare.Between(3,1,1));
    //          
    //          Assert.AreEqual(false,MyCompare.Between(3,1,1,false));
    //          Assert.AreEqual(false,MyCompare.Between(3,3,1,false));
    //          Assert.AreEqual(true,MyCompare.Between(3,2,1,false));
    //      }
    
            [TestCase(true,1,2,3,true)]
            [TestCase(true,1,3,3,true)]
            [TestCase(true,1,1,3,true)]
            [TestCase(false,1,1,3,false)]
            [TestCase(false,1,3,3,false)]
            [TestCase(true,1,2,3,false)]
            [TestCase(true,3,2,1,true)]
            [TestCase(true,3,3,1,true)]
            [TestCase(true,3,1,1,true)]
            [TestCase(false,3,1,1,false)]
            [TestCase(false,3,3,1,false)]
            [TestCase(true,3,2,1,false)]
            public void BetweenTest(bool expected, int lower, int current, int higher, bool inclusive = true)
            {
                bool result = MyCompare.Between(lower, current, higher, inclusive);
                Assert.AreEqual(expected, result);
            }
    
        }
    }
    
    TestCase에서 기본 매개변수를 사용할 수 없습니까?진행이 잘 안 돼서 그걸 썼어요.
    프로젝트의 최종 이미지
    결국 이렇게 될 것 같은 느낌.

    6. NUnit-Gui에서 테스트 시작
    (미리 건물을 통과해 주십시오)
  • 프로그램 메뉴에서 NUnit을 시작합니다.
  • File -> Open Project -> RenameAlignDigitTest.dll
  • 열기
  • "Run"을 클릭하여 테스트
  • 프로젝트(*.nuit)를 저장하면 바로 테스트가 가능합니다.

  • 참고 자료
  • VB2010 Express+NUnit2.5, 첫 번째 TDD Step by Step: TDD.NET
  • 뉴닛을 사용해 보도록 하겠습니다.
  • @IT:.NET Tools: 테스트 드라이브 개발 도구의 최전선(전면)
  • NUnit2.5 RC-ZOETROPE의 일기
  • 좋은 웹페이지 즐겨찾기