복붙노트

[SCALA] 전이나 모든 Scalatest 테스트 후 뭔가를하고

SCALA

전이나 모든 Scalatest 테스트 후 뭔가를하고

그 scalatest 일련의 시험이 편안한 API의 테스트 다른 엔드 포인트. 난 정말 그들이 최고의 조직을 위해 다른 파일로 분리합니다.

내 문제는 뭔가 시작하는 방법입니다 (내 경우에는 HTTP 서버를하지만 그것이 무엇인지는 중요하지 않습니다) 모든 테스트 전에 모든 테스트 완료 후 종료.

나는 BeforeAndAfterAll에 대해 알고 있지만, 단지 내 하나의 테스트 파일 후 / 전 수행합니다. 나는 그런 일이 필요하지만, 예를 들어 모든 테스트를위한 :

- 시험 전에 시작 HTTP 서버 - 모든 테스트 스위트를 실행 - HTTP 서버 종료

해결법

  1. ==============================

    1.이 작업을 수행하는 구성 방법은 중첩 된 스위트 룸을 사용하는 것입니다. 스위트 룸은 반환이 IndexedSeq [스위트]하는 nestedSuites 방법이있다 (2.0은 1.9.1에서이 목록 [스위트이었다)를. 스위트 룸은 중첩 된 스위트 룸을 실행을 담당하는 runNestedSuites 방법이있다. 기본 runNestedSuites으로 nestedSuites를 호출하고, 각 반환 스위트 룸 중 하나를 발동 직접 실행하거나에 배포자가 전달되는 경우, 대리점에두고 중첩 된 스위트 룸은 병렬로 실행할 수 있습니다 그래서.

    이 작업을 수행하는 구성 방법은 중첩 된 스위트 룸을 사용하는 것입니다. 스위트 룸은 반환이 IndexedSeq [스위트]하는 nestedSuites 방법이있다 (2.0은 1.9.1에서이 목록 [스위트이었다)를. 스위트 룸은 중첩 된 스위트 룸을 실행을 담당하는 runNestedSuites 방법이있다. 기본 runNestedSuites으로 nestedSuites를 호출하고, 각 반환 스위트 룸 중 하나를 발동 직접 실행하거나에 배포자가 전달되는 경우, 대리점에두고 중첩 된 스위트 룸은 병렬로 실행할 수 있습니다 그래서.

    그래서 당신이 정말로 아마 무엇을 원하는 EndpointTests의 nestedSuites 방법에서 클래스, 그 중 반환 인스턴스에 푸과 바을 것입니다. 차종 쉽게 스위트라고하는 클래스가있다. 다음은 그 사용의 예입니다 :

    import org.scalatest._
    import matchers.MustMatchers
    
    class Foo extends FunSpec with MustMatchers {
      describe("Message here...") {
        it("Must do something") {  }
        it("Must be ok") {  }
      }
    }
    
    class Bar extends FunSpec with MustMatchers {
      describe("Hello you...") {
        it("One more!") {  }
      }
    }
    
    class EndpointTests extends Suites(new Foo, new Bar) with BeforeAndAfterAll {
    
      override def beforeAll(configMap: Map[String, Any]) {
        println("Before!")  // start up your web server or whatever
      }     
    
      override def afterAll(configMap: Map[String, Any]) {
        println("After!")  // shut down the web server
      }         
    }
    

    하나의 잠재적 인 문제는, 그러나, 당신이 검색을 사용하는 경우 것이 EndpointTests 셋 모두, 푸, 그리고 바이 발견되며, 실행에 스위트를 찾을 수 있다는 것입니다. ScalaTest 2.0에서는 @DoNotDiscover와 푸과 바, 주석을 달 수 있습니다, 그리고 ScalaTest의 러너를 발견하지 않습니다. 그러나 SBT 여전히 것이다. 우리는 현재 SBT 그래서 DoNotDiscover로 주석하는 동안 다른 검색 가능 스위트를 전달하는 강화된다, 그러나 이것은 아직 출시되지 SBT 0.13에있을 것입니다. 그 동안 당신은 푸과 바에 사용되지 않은 생성자 매개 변수를 추가하여 그들을 무시하는 SBT를 얻을 수 있습니다.

  2. ==============================

    2.또는 당신은 단지 객체를 사용할 수 있습니다.

    또는 당신은 단지 객체를 사용할 수 있습니다.

    object TestServer {
      startServer()
    }
    

    당신이 개체에 액세스 할 때이 서버를 시작, 초기화됩니다. 그냥 당신이 개체에 액세스하는의 신체의 일반적인 특성을 만듭니다. 그런 다음 모든 테스트에 그 특성을 믹스 인. 끝난.

    만약 데몬 모드에서 서버가 실행 (예를 들어, 플레이! 테스트 모드에서 응용 프로그램) 모든 테스트가 실행 후 종료 자동으로됩니다.

  3. ==============================

    3.좋아, 방법을 발견했다. Scalatest는 "마스터"제품군의 기능을 가지고 있지 않습니다 (여기에 누군가가 나를 해결하지 않는 한) 것 같습니다. 하지만 ... 당신은 좀 하나를 구축 할 수 있습니다.

    좋아, 방법을 발견했다. Scalatest는 "마스터"제품군의 기능을 가지고 있지 않습니다 (여기에 누군가가 나를 해결하지 않는 한) 것 같습니다. 하지만 ... 당신은 좀 하나를 구축 할 수 있습니다.

    당신은 특성에서 제품군을 구성 할 수 있습니다. 내 엔드 포인트 예제를 사용하여 이렇게 :

    class EndpointTests extends FunSpec with MustMatchers with BeforeAndAfterAll 
          with Foo with Bar {
            override def beforeAll(configMap: Map[String, Any]) {
                println("Before!")  // start up your web server or whatever
            }
    
            override def afterAll(configMap: Map[String, Any]) {
                println("After!")  // shut down the web server
            }   
    }
    

    좋아,하지만 테스트에 대한? 바 푸와를 알 수 있습니다. 나는 특성 등에 따라 테스트를 가져 오는거야. 여기를 봐:

    trait Foo extends FunSpec with MustMatchers {
        describe("Message here...") {
            it("Must do something") {  }
            it("Must be ok") {  }
        }
    }
    
    trait Bar extends FunSpec with MustMatchers { 
        describe("Hello you...") {
            it("One more!") {  }
        }
    }
    
  4. from https://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests by cc-by-sa and MIT license