Как я могу объединить общие тесты с приборами, которые требуют очистки? - PullRequest
6 голосов
/ 19 июня 2019

В настоящее время у меня есть набор общих тестов 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, которые ссылаются на объекты, которые живут в базе данных. Чтобы запустить эти тесты, мне нужно создать соответствующие записи базы данных, а затем удалить их после теста. Как я могу эффективно использовать стратегии крепления, которые позволяют мне выполнять настройку и демонтаж с общими тестами?

Хотя это не идеально, я был бы готов принять решение, которое бы раз и навсегда завершило настройку и разборку для всего пакета. Я могу написать тесты, чтобы они не мешали друг другу, но мне нужно, чтобы БД не загромождалась со временем.

1 Ответ

2 голосов
/ 19 июня 2019

Попробуйте

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
  }
}
...