首页 > 解决方案 > 如何将共享测试与需要清理的固定装置结合起来?

问题描述

目前,我有一组共享的 Scalatest 测试,它们存在于一个特征中,并在必要时混合到测试类中,如下所示:

trait SharedBehavior{

    def supportsCoolFeature(){
//Testing happens here
    }

    def doesNotSupportCoolFeature(){
//Testing happens here
    }
}
class MyItemTests extends SharedBehavior{

 "A-Type Items" should behave like supportsCoolFeature(itemA)

 "B-Type Items" should behave like doesNotSupportCoolFeature(itemB)
}

不幸的是,itemA并且itemB是引用数据库中对象的 Scala 类实例。要运行这些测试,我需要创建相应的数据库记录,然后在测试后将其删除。如何有效地使用夹具策略,让我能够通过共享测试执行设置和拆卸?

尽管它并不理想,但我愿意接受一个对整个套件进行一次设置和拆卸的解决方案。我可以编写测试,这样它们就不会相互干扰,但我需要防止数据库随着时间的推移变得混乱。

标签: scalascalatestfixtures

解决方案


尝试

class MyItemTests extends SharedBehavior with BeforeAndAfterEach with DbSupport {

  override def afterEach(): Unit = {
    db.deleteAll()
  }

  def itemA: Item = {
    val item = createItemA
    db.insert(item)
    item
  }

  def itemB: Item = {
    val item = createItemB
    db.insert(item)
    item
  }

 "A-Type Items" should behave like supportsCoolFeature(itemA)

 "B-Type Items" should behave like doesNotSupportCoolFeature(itemB)
}

trait SharedBehavior {

    def supportsCoolFeature(item: => Item) {
      // assert on item
    }

    def doesNotSupportCoolFeature(item: => Item) {
      // assert on item
    }
}

trait DbSupport {
  val db = {
    // initialise dataase
  }
}

推荐阅读