2014-03-05 14 views
3

나는 우리의 모든 시스템 테스트를 테스트 케이스와 요구 사항에 연결합니다. 모든 요구 사항에는 ID가 있습니다. 모든 테스트 케이스/시스템 테스트는 다양한 요구 사항을 테스트합니다. 모든 코드 모듈은 여러 요구 사항에 연결됩니다.NUnit - 같은 이름의 여러 속성? 요구 사항에 연결

모든 시스템 테스트를 운전 요건에 연결하는 가장 좋은 방법을 찾으려고합니다. 속성은 키 - 값 쌍하기 때문에 깰 것이다, 그러나

[NUnit.Framework.Property("Release", "6.0.0")] 
    [NUnit.Framework.Property("Requirement", "FR50082")] 
    [NUnit.Framework.Property("Requirement", "FR50084")] 
    [NUnit.Framework.Property("Requirement", "FR50085")] 
    [TestCase(....)] 
    public void TestSomething(string a, string b...) 

:

내가 좋아하는 뭔가를 기대했다. 시스템에서 동일한 키를 사용하여 여러 속성을 가질 수 없습니다.

내가 원하는 이유는 모듈이 이러한 요구 사항을 변경하면 시스템의 특정 요구 사항을 테스트 할 수 있기 때문입니다.

모든 빌드에서 1,000 개가 넘는 시스템 테스트를 실행하는 대신 코드에 대한 변경 사항을 기반으로 테스트 할 대상을 지정할 수 있습니다.

일부 시스템 테스트는 5 분 이상 (엔터프라이즈 의료 시스템) 실행되므로 "모두 실행하십시오"는 실행 가능한 솔루션이 아닙니다. 우리는 그렇게하지만 환경을 통해 홍보하기 전에해야합니다.

생각하십니까?

답변

2

custom property attributeNUnit.Framework.Property에서 파생 된 것으로 간주 했습니까?

는 다음과 같은

뭔가가 프로그램C#으로 설정 언어 및 nunit.framework.dll에 대한 참조 (버전 2.4.8) 당신이 LINQPad 4 "질의"에 의해 판단을 위해 작동 할 것 같아 추가 :

// main method to exercise a our PoC test case 
void Main() 
{ 
    TestSomething("a", "b"); 
} 

// our PoC custom property attribute 
[AttributeUsage(AttributeTargets.Method, AllowMultiple=false)] 
public class RequirementsAttribute : NUnit.Framework.PropertyAttribute 
{ 
    public RequirementsAttribute(string[] requirements) 
     : base(requirements) 
    { 
    } 
} 

// a test case using our custom property attribute to relate it to multiple requirements 
[Requirements(new string[] { "FR50082", "FR50084" })] 
[TestCase("PoCTest")] 
public void TestSomething(string a, string b) 
{ 
    // blah, blah, blah 

    Assert.AreNotEqual(a, b); 
} 
+2

더욱 섹시 :'Public RequirementsAttribute (params string [] requirements)'를 사용하면'[Requirements ("FR50082", "FR50084")]'라고 쓸 수 있습니다. –

+0

@DioF : 동의 함. 그 통어론 설탕을 주셔서 감사합니다! – J0e3gan

+0

awesome - 고마워! –

0

웬일인지 나는 위의 설명에 Google 토론 게시글에 대한 링크를 추가 할 수 없으므로 여기에 게시물을 추가했습니다.

  1. 이 카테고리는 항상 당신이 하나를 지정하지 않을 경우, 그것은 이름이됩니다에 보내 어떤 문자열의 xxxxx는 "카테고리 [XXXXXXX]"로 TE에 표시됩니다 (링크는 https://groups.google.com/forum/#!topic/nunit-discuss/ndV3VTPndck입니다) CategoryAttribute에서 파생 된 클래스의

  2. 카테고리를 사용하려면 Charlie가 Google 게시물에서 말한 것처럼 요구 사항 당 하나의 항목을 사용해야합니다. 당신이 값을 문자열 요구 사항을 추가하면 꽤 좋은 볼 수 있지만, 대부분은 상기 (1),이 같은 수의 규칙을 따르

카테고리 [요구 사항 : FR12345]

코드 :

public class RequirementAttribute : CategoryAttribute 
{ 
    public RequirementAttribute(string s) 
     : base("Requirement:" + s) 
    { } 
} 
  1. 당신이 같이 표시 할 경우 테스트 당 다음 속성을 사용해야하지만, 여러 키를 가질 수 없습니다, 요구 사항 [FR12345를, 그래서 하나의 예.

코드 :

public class RequirementAttribute : PropertyAttribute 
{ 
    public RequirementAttribute(string s) 
     : base(s) 
    {} 
} 

4 : 당신이 시험에 여러 요구 사항이 여전히 (3), 당신은 키가 고유해야합니다의 표시 같은 것을 갖고 싶어. 너무 나빠 보이지 않아도됩니다. 아래 코드에서 방금 카운터를 추가했습니다.

[Requirement(new[] { "1234", "2345" })] 
    [Test] 
    public void Test() 
    { } 
: 당신이 좋아하는 그것을 사용

public class RequirementAttribute : PropertyAttribute 
    { 
     public RequirementAttribute(string[] array) 
     { 
      int i = 0; 
      foreach (var s in array) 
      { 
       Properties.Add("Requirement-" + i, s); 
       i++; 
      } 
     } 
    } 

과 :

요구 사항-1 [FR12345]

요구 사항-2 [FR23456]

코드 :로 이 표시됩니다

("new"가없는 구문을 원하면 이전 답변에서 대신 param을 사용하는 구문).

옵션 4는 요구 사항 번호별로 그룹화하지 않고 카운터로 그룹화합니다. 요구 사항 번호별로 그룹화하려면 옵션 5를 사용할 수 있습니다.

5. 키에 요구 사항 번호를 추가하고 값은 비워 둡니다. 그것은 다음과 같이 표시됩니다, 이런 식으로

요구 사항 - FR12345

당신은 또한 접두사를 생략하고 TE 카테고리의 자신의 종류 등의 각 요구 사항이 있습니다.

코드

:

public class RequirementAttribute : PropertyAttribute 
{ 
    public RequirementAttribute(string[] array) 
    { 
     foreach (var s in array) 
     { 
      Properties.Add("Requirement-" + s,""); 
     } 
    } 
} 

, 당신은 물론 아예 접두사를 생략 할 수있다.