Kotest 4.3 버전

11905 단어 kotesttestingkotlin
Kotest 팀은 Kotest 4.3.0의 발표를 기쁘게 발표했다.
이 블로그는 이 버전에 추가된 새로운 기능들을 소개했다.
전체 목록은 changelog 을 참조하십시오.

새로운 및 개선된 데이터 구동 테스트


Kotest는 데이터 구동 테스트 지원을 개선하여 프레임워크에 직접 통합했습니다.이것은 현재 하나의 테스트 용례 항목을 자동으로 생성할 것이라는 것을 의미한다.
예를 들어, 입력 값이 유효하면truepythagorean triples로 되돌아오는 함수를 테스트해 봅시다.
fun isPythagTriple(a: Int, b: Int, c: Int): Boolean = a * a + b * b == c * c
우리는 먼저 데이터 클래스를 작성합니다. 이 클래스는 줄마다 입력 그룹을 저장합니다.
data class PythagTriple(val a: Int, val b: Int, val c: Int)
다음은 테스트 용례에서 함수forAll를 호출하여 하나 이상의 데이터 클래스를 전달하고
주어진 줄을 위해 테스트 논리를 실행하는 lambda.
context("Pythag triples tests") {
    forAll(
       PythagTriple(3, 4, 5),
       PythagTriple(6, 8, 10),
       PythagTriple(8, 15, 17),
       PythagTriple(7, 24, 25)
    ) { (a, b, c) ->
        isPythagTriple(a, b, c) shouldBe true
    }
}
Kotest는 입력 줄마다 테스트 용례를 자동으로 생성합니다. 입력 줄마다 수동으로 단독 테스트 용례를 작성한 것처럼.

전체 문서click here.

레벨 라이브러리에서 DIF 주석 활성화


완전한 실례화 규범을 피하는 것은 매우 유용하다. 일반적으로 우리는 테스트 라벨을 통해 실현할 수 있다.단, 맞춤형 코드로 이 점을 실현하려면 주석EnabledIf이 추가되었습니다.EnabledIf 주석규범으로 EnabledCondition에서 확장된 클래스를 전달하고 이 조건은 실행할 때 호출되어 실례화된 규범이어야 하는지 확인합니다.EnabledCondition 실현은 반드시 제로 파라미터 구조 함수를 가지고 있어야 한다.
예를 들어, 자정에만 테스트를 수행하는 조건을 만듭니다.
class EnabledIfMidnight : EnabledCondition {
   override fun enabled(specKlass: KClass<out Spec>): Boolean = LocalTime.now().hour == 0
}
그런 다음 레벨 라이브러리에 추가합니다.
@EnabledIf(EnabledIfMidnight::class)
class EnabledIfTest : FunSpec() {
   init {
      test("tis midnight when the witches roam free") {
        // test here
      }
   }
}

테스트 용례 심각성


테스트 용례는 테스트 라벨을 통해 조건부로 실행할 수 있으며, 현재도 심각도 단계를 통해 실행할 수 있다.등급은 막힘급, 임계급, 정상급, 부차급과 일반급을 포함한다.
각 테스트 용례를 심각도 레벨로 표시할 수 있습니다.
class MyTest : FunSpec() {
   init {
      test("very very important").config(severity = TestCaseSeverityLevel.CRITICAL) {
        // test here
      }
   }
}
만약 우리가 관건적이거나 더 높은 단계의 테스트를 실행하고 싶다면, 우리는 시스템 속성kotest.framework.test.severity=CRITICAL을 사용하여 실행할 수 있다
만약 우리가 방대한 테스트 세트가 있고, 먼저 단독 테스트 운행에서 테스트를 실행하기를 원한다면, 이것은 매우 유용할 것이다.
기본적으로 모든 테스트를 실행합니다.

소스 참조 비활성화


테스트 용례를 만들 때마다 Kotest는 테스트 용례를 연결할 수 있도록 창고 추적을 만듭니다.스택 추적에는 테스트 창에 링크를 만드는 데 사용할 Intellij 플러그인의 파일 이름과 행 번호가 들어 있습니다.그것은sourceref라고 부른다.
1000개의 테스트가 있으며,gradle를 통해 전체 세트를 실행할 때 감속이 발생하면, 현재 비활성화할 수 있습니다
시스템 속성 설정kotest.framework.sourceref.disable=true을 통해 이러한 SourceRef 생성
일반적으로 CI를 위한 방대한 테스트 키트가 있을 때만 유용합니다.

엔진 무관


테스트 프레임워크는 생태계에서 의존도가 가장 낮은 프레임워크 중의 하나다.많은 Kotlin 라이브러리에서 Kotest를 사용하기 때문에, Kotest와 프로젝트가 같은 의존항을 사용하지만, 버전이 다르면 충돌이 발생할 수 있습니다.
만약 Kotest가 가능한 한 적은 의존항을 가지고 있다면 이것은 유익하다.이를 위해 4.3.0은 Kotest 프레임워크의 의존 관계를 Classgraph (스캔 규범용), Mordant (컨트롤러 출력용), opentest4j로 간소화했다.

매칭기는 링크를 편리하게 하기 위해 "this" 를 되돌려줍니다.


본고의 저자가 보기에 Kotest는 Kotlin에 대해 가장 전면적인 단언 지지를 가지고 있다.이제 더 편리해졌습니다. 필요에 따라 단언을 연결할 수 있습니다.
그래서
val employees: List<Employee> = ...
employees.shouldBeSorted()
employees.shouldHaveSize(4)
employees.shouldContain(Employee("Sam", "Chicago"))
너 이제 해도 돼.
val employees: List<Employee> = ...
employees.shouldBeSorted()
         .shouldHaveSize(4)
         .shouldContain(Employee("Sam", "Chicago"))
물론 이것은 완전히 선택할 수 있는 것이다.

kotlinxdatetime의 속성 테스트 모듈


Kotest의 확장 성능 테스트 라이브러리는 현재 부화 발전기kotlinx datetime library를 포함하고 있다.
모듈kotest-property-datetime을 버전에 추가합니다.이러한 생성기는 JVM 및 JS에 사용할 수 있습니다.
예:
forAll(Arb.datetime(1987..1994)) { date ->
   isValidStarTrekTngSeason(date) shouldBe true
}

테스트 이름에서 공백을 제거하는 옵션


여러 줄에 테스트 이름을 정의하려면, Kotest는 현재 테스트 이름에서 선도, 꼬리, 중복된 공백을 제거합니다.
예를 들어, 다음 사양은 다음과 같습니다.
class MySpec : StringSpec() {
  init {
   """this is a
      test spanning multiple lines""" { }
  }
}
일반 출력은
this is a      test spanning multiple lines
구성 객체removeTestNameWhitespace를true로 설정하면 다음 출력으로 대체됩니다.
this is a test spanning multiple lines

감사합니다.


이번 발표에 기여해 주신 모든 분들께 감사드립니다.
AJ Alt、Alex Facciorusso、Ashish Kumar Joy、J Phani Mahesh、Jasper de Vries、Javier Segovia Córdoba、,
Josh Graham、KeremAslan、Leonardo Colman、MichałSikora、Mitchell Yuwono、Neenad Ingole、Rick Busarow、,
SergKhram、Sergei Khramkov、crazyk2、sksamuel

좋은 웹페이지 즐겨찾기