2014-11-14 8 views
5

내가 매개 변수 중 하나가 배열을TestCase에 표시 이름이

private static readonly object[] ReturnChopCases = 
    { 
     new TestCaseData(3, new List<int> {}).Returns(-1), 
     new TestCaseData(3, new List<int> {1}).Returns(1), 
     new TestCaseData(1, new List<int> {1,2}).Returns(1), 
    }; 

    [TestCaseSource("ReturnChopCases")] 
    public int test_chop(int SearchNumber, int[] SearchArray) 
    { 
     return Chopper.Chop(3, SearchArray); 
    } 

문제가되는 여러 테스트를 실행 NUnit를에 TestCaseSource를 사용하려고하면 테스트 러너에 표시되는 이름 (이다 나는 NUnit 테스트 어댑터를 사용하고있다.) 꽤 쓸모가 없다. 그들은 모두 test_chop(0,System.Int32[]) 또는 List을 사용한다면 test_chop(0,System.Collections.Generic.List`1[System.Int32])으로 표시한다.

어떻게하면 쉽게 읽을 수있는 테스트를 유지하고 테스트 러너의 테스트에 유용한 테스트 이름을 부여 할 수 있습니까? 나는 몇 가지 시도를했지만 여전히 위에서 언급 한 이름을 얻는다.

+2

'.SetName ("your name")'을 붙이면 테스트에 명시 적으로 이름을 붙일 수 있습니다. 당신은 좀 더 자동적 인 것을 찾고 있을지도 모른다. –

+0

네, 실제로 어레이와 관련해서는 더 잘하지 못한다는 사실에 놀랐습니다. '.SetName ("")'이 가장 좋은 옵션처럼 보이거나이 테스트의 이름을 전달하는 메소드를 작성할 수 있습니다. –

답변

2

이이

new TestCaseData(3, new List<int> {}).Returns(-1).SetName("test_chop_List<int>"), 
+0

비록 더 나은 솔루션이 있었으면 좋겠지 만,이 모양처럼, 감사합니다 :) –

1

테스트를 내가 갔다 솔루션의 이름을 위해 SetName 기능을 사용하여 먼저 내 사용자 정의 테스트 케이스

public class CustomTestCase 
{ 
    public CustomTestCase(int SearchNumber, List<int> List, int Result) 
    { 
     searchNumber = SearchNumber; 
     list = List; 
     result = Result; 
    } 
    private int searchNumber; 
    private List<int> list; 
    private int result; 

    public string TestName() 
    { 
     return string.Format("TestChop({0},{{{1}}})", searchNumber, String.Join(",", list)); 
    } 

    public TestCaseData SimpleTest() 
    { 
     return new TestCaseData(searchNumber, list).Returns(result).SetName(this.TestName()); 
    } 
} 

을위한 클래스를 만들었 그리고 내가 사용에 그 TestCaseSource

private static IEnumerable ReturnChopCases() 
{ 
    List<int> emptyList = new List<int> { }; 
    yield return new CustomTestCase(3,emptyList,-1).SimpleTest(); 

    List<int> singleItemList = new List<int> { 1 }; 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
} 

테스트는 동일합니다.

여전히 NUnit이 더 유용한 이름을 생성해야한다고 생각하지만이 문제를 가장 쉽게 처리 할 수있는 방법을 찾았습니다. 예외를 처리하고 싶다면이를 처리 할 수있는 다른 방법을 만들 수 있습니다.

NB : using System.Collections;using System.Collections.Generic;을 반드시 포함해야합니다.