2015-01-08 1 views
3

flatspec 특성을 사용하여 테스트를 작성하고 있으며이 클래스의 모든 테스트에 특정 태그를 자동으로 태그하는 기본 클래스를 만들고 싶습니다.클래스의 모든 테스트를 특정 태그로 자동 태그 지정하는 방법

예를 들어 IntegrationTest 클래스에서 상속 된 클래스의 모든 테스트에는 자동으로 적절하게 태그가 지정됩니다. 그래서 대신 :

class ExampleSpec extends FlatSpec { 
     "The Scala language" must "add correctly" taggedAs(IntegrationTest) in { 
     val sum = 1 + 1 
     assert(sum === 2) 
    } 

내가하고 싶은 것은이 작업을 수행하고 여전히 IntegrationTest

class ExampleSpec extends IntegrationSpec { 
     "The Scala language" must "add correctly" in { 
     val sum = 1 + 1 
     assert(sum === 2) 
    } 

감사로 태그 테스트를 해!

답변

3

부모 클래스가 아닌 테스트 클래스에서 직접 주석을 사용하려는 경우 https://github.com/kciesielski/tags-demo에서 예제를 사용할 수 있습니다. 그런 다음

package tags; 

import java.lang.annotation.Retention; 
import java.lang.annotation.Target; 
import static java.lang.annotation.ElementType.METHOD; 
import static java.lang.annotation.ElementType.TYPE; 
import static java.lang.annotation.RetentionPolicy.RUNTIME; 

@org.scalatest.TagAnnotation 
@Retention(RUNTIME) 
@Target({METHOD, TYPE}) 
public @interface MyAnnotation { 
} 

당신이 스칼라 테스트 클래스에 주석을 사용 : 귀하의 예를 들어 어느 정도 적응, 당신은 자바 클래스를 선언 할 필요가

@tags.MyAnnotation 
class ExampleSpec extends FlatSpec { 
    "The Scala language" must "add correctly" in { 
    val sum = 1 + 1 
    assert(sum === 2) 
} 

그런 다음 지정하는 실제 문자열 tags.MyAnnotation을 사용해야합니다 원하는 태그를 실행 (또는 무시)합니다.

대신 부모 클래스에 주석을 달았지만 제대로 작동하지 않습니다. 나는 당신이하려고하는 다른 것에 따라 당신에게 중요한 문제가되는지 아닌지 상상할 수 있습니다. 내가 GitHub의에 위의 프로젝트 ..에 따라 작업을

2

2.2 ScalaTest 때문에 그것을 받고 그것을 후 말을하지만

사실, org.scalatest.Tag 클래스에 대한 온라인 문서는이 모든 기술의 공정한 작업을 수행합니다. 0 태그는 상속 될 수 있습니다 (http://www.scalatest.org/release_notes/2.2.0).

  1. @ 주석을 주석 정의에 추가하십시오.

    package tags; 
    
    import java.lang.annotation.Retention; 
    import java.lang.annotation.Target; 
    import static java.lang.annotation.ElementType.METHOD; 
    import static java.lang.annotation.ElementType.TYPE; 
    import static java.lang.annotation.RetentionPolicy.RUNTIME; 
    
    **@Inherited** 
    @org.scalatest.TagAnnotation 
    @Retention(RUNTIME) 
    @Target({METHOD, TYPE}) 
    public @interface RequiresIntegrationStuff { 
    } 
    
  2. 은 기본 사양 주석.

    @RequiresIntegrationStuff 
    class IntegrationSpec extends FlatSpec {} 
    
  3. 기본 사양을 기본 클래스로 사용하십시오.

    class ExampleSpec extends IntegrationSpec { 
        "The Scala language" must "add correctly" in { 
        val sum = 1 + 1 
        assert(sum === 2) 
    } 
    
  4. 그 후

는 ExampleSpec는 tags.RequiresIntegrationStuff로 태그됩니다.

현재 작업 프로젝트를 찾을 수 있습니다 : https://github.com/wojda/tags-demo

(Spiro Michaylov's answer에서 https://github.com/kciesielski/tags-demo 기준)