Выполнение индивидуальных тестовых методов ScalaTest в IntelliJ IDEA

В IntelliJ IDEA 12 можно запустить один выбранный тестовый метод JUnit, однако это не представляется возможным с помощью ScalaTest. Вы можете запустить весь тестовый класс или ничего, но, похоже, в IntelliJ IDEA 12 нет более тонкого элемента управления ScalaTest (пока еще не пробовал IDEA 13).

Итак, вопрос: Есть ли способ выполнить только один выбранный тестовый метод ScalaTest в IntelliJ (как это возможно с помощью методов тестирования JUnit.)

Ниже приведен пример кода, методы тестирования которого я хотел бы запустить отдельно в IntelliJ. Любая идея, как это сделать?

Я пробовал JUnitRunner, но это не помогло.

class NodeDAOTest extends FlatSpec with SessionAware with BeforeAndAfter {

  before{ IM3_SessionFactory.removeData
  println("before is running")}
  println("NodeDAOTest constructor.")
  def numberOfNodes=initAndCloseDB(transaction{NodeDAO.numberOfNodes})


  "Node" can "be added to DB and removed." in {
    val n =new TextNode
     assert(numberOfNodes===0)

    initAndCloseDB { transaction{session save n}}
     assert(numberOfNodes===1)

    initAndCloseDB { transaction{deleteNode(n)}}
     assert(numberOfNodes===0)
  }

  def getTag= initAndCloseDB {transaction{ session.createQuery("from Tag").list().get(0).asInstanceOf[Tag]}}
  def getNode=initAndCloseDB {transaction{ session.createQuery("from Node").list().get(0).asInstanceOf[Node]} }

  it can "be tagged and untagged" in {
    val t=new Tag
    val n=new TextNode

    assert(numberOfNodes==0,"before adding one tag (and Node), there should be 0 Node in the DB")

    initAndCloseDB{ transaction {addTag(t,n) }}

    assert (getNode.getNumberOfTags===1)
    assert (getTag.getNodes.size===1)

    initAndCloseDB(transaction{removeTag(t,n)})

    assert (numberOfNodes==1,"after removing the tag, there should be 1 Node in the DB")
    assert (getNode.getNumberOfTags===0)
    assert (getTag.getNodes.size===0)
  }

  "Tagged Node" can "be removed." in {
    val f=new TagAndNodeFixture
    assert(numberOfNodes==1)
    initAndCloseDB{ transaction {addTag(f.t,f.n) }}
    initAndCloseDB { transaction{deleteNode (f.n)} }
    assert(numberOfNodes==0)
    // the tag will be removed from the node
  }

  "Tag" can "be deleted and that will be removed from in-memory Nodes" in{

  }



}

Ответ 1

Я использую IntelliJ IDEA 13, и я могу запустить одиночный тест, когда я использую FunSuite - поместите курсор в тест и нажмите Alt + Shift + F10, и тест есть. Это невозможно с тестами FlatSpec.

Он был добавлен недавно, и я помню, что он не работал в версии 12 даже для FunSuite.

Ответ 2

Вы можете создать конфигурацию запуска для определенного теста flatspec, поместив курсор в тест, и в меню "Выполнить" выберите Run... (опция + Shift + F10 на Mac), а рядом с верхней частью будет запись для конкретный тест.

Вы можете вручную создать конфигурацию запуска, выбрав обычный тестовый класс, а затем скопировав имя теста ( "foo" в "foo" should "bar" in...) в поле Test Name

Ответ 3

У меня была та же проблема. Он появляется, если у вас есть место в первом слове

"test " should "..."

Когда я удаляю место, тест начинает запускать

Ответ 4

Комментарий к выше сказанному: скажите, что это ваш тестовый набор:

"A calendar" should {
    "not have any availability" in {...}
}

или

"A calendar" when {
    "empty" should {
        "not have any availability" in {... }
    }
}

Если вы щелкните правой кнопкой мыши на второй (или третьей) строке (или используйте ярлыки в других ответах: Alt Shift F10 или опция + Shift + F10 на Mac) IntelliJ предоставит вам возможность создать конфигурацию запуска "Spec.not...", который при запуске скажет "Empty test suite".

Причина в том, что "тестовое имя" создано неправильно. Измените конфигурацию запуска, чтобы использовать полное имя: "Календар не должен иметь..." или "Календарь, когда пустой не должен быть...", и он будет работать. Кажется, проблема связана с тем, что имя должно быть из кода.