2016-10-03 1 views
2

나는 다음을 수행하는 org.scalatest.FunSpec with org.scalatest.Matchers 테스트를 가지고 있습니다.Scalatest : 추가 설명이있는 Matchers 여야합니까?

val tol = 1e-10 
val res = 1.000000000000001 
val ref = 1.000000000000000 
res should be (ref +- tol) 

하지만 물론 내가 테스트 코드의 단위를 변경할 수 없습니다 이름으로 키가 여러 경우에 대한 루프에서 그렇게 그래서 나는 그들에게 연관된 이름을 가진 값의 컬렉션을 얻을. 따라서 위의 테스트를 위해 적용 할 이름을 반영하기 위해 추가 컨텍스트 또는 추가 설명 name을 배치해야합니다. 그들은 외부 이미 있기 때문에이 시점에서 itdescribe을 사용할 수 없습니다

val name : String = ... 
res should be (ref +- tol) for name 

: 내가 좋아하는 뭔가를해야합니다.

답변

3

정말 당신이 뭘하려는 건지에 따라 달라집니다, 당신은 아마 더 완전한 예제를 추가해야 달성하려는 목표는 무엇입니까?하지만 루프에서는 describe을 사용할 수 있습니다.

class TempTest extends FunSpec with Matchers { 

    describe("Some example test") { 

    (1 to 10).foreach { i => // your loop here 

     describe(s"Scenario $i") { 
     it("should be equal to itself") { 
      i shouldBe i 
     } 
     } 
    } 
    } 
} 

UPDATE : 예를 들어 당신은 조건이 실패 할 경우 오류 단서 문자열을 추가합니다 withClue는 정규 예컨대 :

withClue("Some clarifying message") { 
    i shouldBe 5 
} 

이 더 많은 컨텍스트를 추가 할 수 있습니다.

+0

좋습니다.하지만 그렇게 할 수 없다고 가정합니다 ... 우리는 클러스터에서 원격으로 계산할 테스트를 보내는 scalatest 확장자를가집니다 ...이 프레임 워크 이미 outtermost'describe'를 잡고 자동으로 각 테스트를'it'에서 자동으로 감싸기 때문에 ...'name은'res에 있어야한다. (ref + - tol)' 조건 ... 어쩌면 유일한 방법은 잠재적 인'TestFailedException'을 포착하고 풍부하게하는 것입니다. 물론'assertResult'로 옮기는 것도 또 다른 가능성입니다. 일치하는 사람을 포기하십시오. –

+0

@GiovanniAzua가 업데이트의 예제가 도움이 될까요? –

+0

그건 그렇고, 당신은 그것을 찍었습니다 :) 실제 상황 시나리오가 거의 밝혀지지 않은 채로 scalatest가 설계되었다는 것이 정말 기쁩니다 : D –

1

아마도 GivenWhenThen을 사용하여 테스트보고에 컨텍스트를 추가 할 수 있습니다. 나는 당신이 루프에서 여러 테스트를 포장하는 방법을 정확히 잘 모르겠지만, 여기에 아이디어 :

import org.scalatest.{GivenWhenThen, WordSpec} 

/** 
    * Created by alex on 10/3/16. 
    */ 
class Temp extends WordSpec with GivenWhenThen{ 
    val names = List("Alex", "Dana") 
    for(name <- names)yield{ 
    "Reversing a name " + name + " two times" should { 
     "result in the same name" in{ 
     Given("name " + name) 
     When("reversed two times") 
     val reversed = name.reverse.reverse 
     Then("it should be the same") 
     assert(name === reversed) 
     } 
    } 
    } 
} 
+0

그러나 이것은 좋은 포인터입니다. 그렇다면 'res should be (ref + - tol)'에 의해 생성 된 최상의 컨텍스트 오류를 ​​포기하고 대신 assert를 사용해야합니다. 나는 또한 'GivenWhenThen'없이 직접 어설 션으로 전환 할 수 있습니다 –

+0

동의 함 모든 유효한 포인트 –