모든 Scalatest 테스트 전후에 조치 수행
RESTful API의 다양한 엔드 포인트를 테스트하는 스칼라 테스트 테스트 모음이 있습니다. 최상의 구성을 위해 파일을 여러 파일로 분리하고 싶습니다.
내 문제는 모든 테스트 전에 문제 (내 경우에는 HTTP 서버이지만 그것이 무엇인지는 중요하지 않습니다) 시작하고 모든 테스트가 종료하는 방법입니다.
BeforeAndAfterAll에 대해 하나의 테스트 파일 내에서 전후에만 수행됩니다. 나는 그런 것이 필요하지만 모든 테스트에 대해 예를 들면 다음과 같다.
-테스트 전에 http 서버 시작
-모든 테스트 스위트 실행
-http 서버 종료
이를 수행하는 의도 된 방법은 중첩 스위트를 사용하는 것입니다. Suite에는 IndexedSeq [Suite]를 반환하는 nestedSuites 메서드가 있습니다 (2.0에서는 1.9.1에서는 [Suite] 목록). Suite에는 중첩 된 Suite를 실행하는 runNestedSuites 메소드도 있습니다. 기본적으로 실행 NestedSuites는 nestedSuites를 호출하고 반환 된 각 Suite에서 직접 실행을 호출하거나 배포자가 전달 된 경우 중첩 된 Suite를 배포자에 배치하여 설치 한 수 있습니다.
따라서 Foo와 Bar를 클래스로 생성하여 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, Foo 및 Bar 세 가지가 모두 검색 할 것입니다. ScalaTest 2.0에서는 @DoNotDiscover로 Foo와 Bar에 주석을 달 수 있습니다. ScalaTest의 Runner는이를 발견하지 않습니다. 그러나 sbt는 여전히 할 것입니다. 우리는 현재 DoNotDiscover로 주석이 달린 검색 가능한 스위트를 통과하도록 sbt를 개선하고 아직 출시되지 않은 sbt 0.13에있을 것입니다. 그 동안 사용하지 않는 생성자 변수를 Foo 및 Bar에 추가하여 sbt 가이를 무시할 수 있습니다.
또는 개체를 사용할 수 있습니다.
object TestServer {
startServer()
}
초기화 개체에 액세스하면 서버가 시작됩니다. 공용 특성 개체를 만드십시오. 그런 다음 그 특성을 모든 테스트에 혼합하십시오. 끝난.
서버가 데몬 모드 (예 : 테스트 모드의 Play! 응용 프로그램)에서 실행되는 경우 모든 테스트가 실행 된 후 자동으로 종료됩니다.
좋아, 방법을 찾았다. (여기 누군가가 나를 고칠 수없는 것) 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
}
}
좋아,하지만 테스트는 어때? 와 Foo
함께 Bar
. 나는 거기에서 테스트를 특성으로 가져 왔습니다. 여길 봐 :
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!") { }
}
}
참고 URL : https://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests
'ProgramingTip' 카테고리의 다른 글
셸 명령의 결과로 CMake 변수를 초기화하는 방법 (0) | 2020.11.02 |
---|---|
log4net 대 TraceSource (0) | 2020.11.02 |
함수를 호출하는 백틱 (0) | 2020.11.02 |
MySQL 테이블에 여러 행을 삽입하고 새 ID를 지불해야합니까? (0) | 2020.11.02 |
LINQ 쿼리에서 두 개의 "where"절 또는 "&&"를 가지고 있습니까? (0) | 2020.11.02 |