HaPpY hApPy

2. NUnit - [TestCase] Attribute 본문

.NET/Unit Test

2. NUnit - [TestCase] Attribute

juniguya 2014. 8. 16. 01:41


FileExtension_2[TestCase].zip


ㅠ-ㅠ 공부하는 시간보다 여기 정리하는데 시간이 5배는 걸린다..--;


앞으로 간단히 해야겠답!


이전에는 메소드 위에 [Test] Attribute를 이용해봤다.

하지만 생각해 볼 문제가 있다.

만약 FilePath를 테스트 할 때 아래와 같이 3개의 파일을 테스트 하게 될 경우


"SomeFile1.BUG", //BUG 대문자

"SomeFile2.bug",  //bug 소문자

"SomeFile3.Bug", // Bug 대,소문자


이전 장에서 공부한 [Test]를 사용할 경우 3개의 테스트 함수가 필요하다.

[Test]
public void IsValidExtension_UpperExtension_ResultTrue() // UpperExtension
{
    CFileExtension analyzer = new CFileExtension();
 
    bool result = analyzer.IsValidFileExtension("SomeFile1.BUG");

    Assert.True(result);
}

[Test]
public void IsValidExtension_LowerExtension_ResultTrue() // LowerExtension
{
    CFileExtension analyzer = new CFileExtension();
 
    bool result = analyzer.IsValidFileExtension("SomeFile2.bug");

    Assert.True(result);
}

[Test]
public void IsValidExtension_MixedExtension_ResultTrue() //MixedExtension
{
    CFileExtension analyzer = new CFileExtension();
 
    bool result = analyzer.IsValidFileExtension("SomeFile.Bug");

    Assert.True(result);
}

이렇게 해야 된다...결과는?  

UpperExtension_ResultTrue만 통과했다.

이유는 테스트 조건이 아래와 같이 대문자 일 경우만 통과이기 때문이다.

  public bool IsValidFileExtension(string fullFileName)

        {

            if (fullFileName.EndsWith(".BUG"))

            {

                return true;

            }


            return false;

        }

여튼 결과가 중요한게 아니고, 저런 테스트를 할때 상당히 비 효율적인 코드를 작성해야 되는데, 이를 보완한 Attribute가 있다.

바로 [TestCase] Attribute이다.


위와 동일한 테스트 결과를 얻고 싶다면 아래 처럼 다시 작성해보자.

[TestCase("SomeFile1.BUG")] // 대문자
[TestCase("SomeFile2.bug")] // 소문자
[TestCase("SomeFile3.Bug")] // 대,소문자 
public void IsValidExtension_BadExtension_ResultTrue(string filePath) //위 TestCase를 통해 전달
{
    CFileExtension analyzer = new CFileExtension();

    bool result = analyzer.IsValidFileExtension(filePath);

    Assert.True(result);
}

Run하면 아래와 같은 결과를 얻을수 있다.



조금더 응용해 보자, 아래 처럼 bool값을 추가하자.

[TestCase("SomeFile1.BUG", true)] // 대문자, 통과 예상
[TestCase("SomeFile2.bug", false)] // 소문자, 실패 예상
[TestCase("SomeFile3.Bug", false)] // 대,소문자  실패 예상
public void IsValidExtension_BadExtension_ResultTrue(string filePath, bool bExpected) //위 TestCase를 통해 전달
{
    CFileExtension analyzer = new CFileExtension();

    bool result = analyzer.IsValidFileExtension(filePath);

    Assert.AreEqual(result, bExpected); //Asert.AreEqul로 바뀌고 두 값을 비교해서 true면 통과가 된다.
}
위 코드를 돌려보면 아래와 같은 결과가 나온다.


모두 통과했다.


다음엔 예외가 발생해야 통과하는 테스트를 작성해 보겠답!