Как выполнить несколько тестов с будущим - PullRequest
0 голосов
/ 18 июня 2020

У меня есть несколько тестов Scala с Future и с временем ожидания и такой же структурой. Тесты проверяют какой-либо метод, который записывает файл в файловую систему.

Я хочу выполнять тесты строго согласованно, каждый тест должен начинаться после того, как будет завершен предыдущий тест. Не могли бы вы помочь мне найти путь?

Теперь я провалил тест, потому что следующий тест не может проверить результат.

class Test1 extends AsyncFunSuite with BeforeAndAfterAll with Eventually with Matchers {
       test("test 1") {
          // clean file system

          Try(
             Await.ready(
             Future(TestedMethod1.run(someArgs)), 10 seconds)
          )

           // checking file
      }

       test("test 2") {
         ..... // the same tests
      }
}

class Test2 extends AsyncFunSuite with BeforeAndAfterAll with Eventually with Matchers {
       test("test 1") {
         ..... // the same tests
      }

       test("test 2") {
         ..... // the same tests
      }
}

1 Ответ

2 голосов
/ 18 июня 2020

AsyncFunSuite по умолчанию предоставляет контекст последовательного выполнения

private final val serialExecutionContext: ExecutionContext = new concurrent.SerialExecutionContext
implicit def executionContext: ExecutionContext = serialExecutionContext

, который имеет только одиночный поток, поэтому, если этот поток заблокирован Await, дальнейшие тесты не могут быть продолжены. Решение состоит в том, чтобы реорганизовать ваши тесты, чтобы не использовать Await, а вместо этого просто сопоставить Future как обычно

Future(TestedMethod1.run(someArgs)).map { result =>
   // assert on result
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...