Инициализировать val на самом низкоуровневом приборе

Я пишу свой первый Funspec и хочу использовать одну и ту же фикстуру для нескольких тестов, но по-прежнему хочу использовать новый экземпляр для каждого из них. Для этого я использую трейт BeforeAndAfter. Моя проблема в том, что я не знаю, как передать инициализацию тестируемого объекта методу before и сохранить его в val, чтобы сделать его окончательным. Текущий выглядит так:

class CarTest extends FunsSpec with BeforeAndAfter{

  var car:Car = _

  before { 
      car = Car("BMW i3")
  }

  describe("A car") {

     it("can accelerate") { //do some stuff with car }

     it("can break") { //do some other stuff with car}

  }
}

Итак, вопрос: есть ли способ сделать car val и при этом инициализировать его перед каждым методом с ScalaTest?


person Chirlo    schedule 03.05.2013    source источник


Ответы (1)


Вы можете попробовать использовать такое приспособление:

import org.scalatest.FunSpec
import org.scalatest.BeforeAndAfter
import org.scalatest.fixture

case class Car(model:String)
class CarTest extends fixture.FunSpec{

  type FixtureParam = Car
  def withFixture(test: OneArgTest) {
    val car = Car("BMW")
    test(car)
  }

  describe("A car") {

     it("can accelerate") { car =>

     }

     it("can break") { car =>

     }
  }
}
person cmbaxter    schedule 04.05.2013
comment
Наконец-то у меня появилось время попробовать. Это почти то, что я искал, жаль, что вам нужно указывать параметр для каждого теста ( car => ). Тем не менее, очень приятно узнать о пакете fixture, спасибо. - person Chirlo; 12.05.2013