【问题标题】:Integration test with ScalaTest and Future使用 ScalaTest 和 Future 进行集成测试
【发布时间】:2015-11-17 00:58:01
【问题描述】:

我正在尝试围绕异步方法构建我的应用程序,因此我将 Future 与 Scala 结合使用。如需更多信息,请使用 elastic4s lib 查询 Elasticsearch 服务器。

我从这个模式开始,所以我首先创建了这个方法:

    def insert(person: Person) = {
      client.execute {
        index into "index" / "type" source person
      } onComplete {
        case Success(s) => {
          logger.info("{} has been inserted successfully", interaction.toString)
          something_to_do()
         }
        case Failure(t) => logger.warn("An error has occured: {}", t.getMessage)
     }
   }

如果我理解得很好,这种方法是不可测试的。 当我读到这个post 时,我必须创建一个返回 Future 的方法,并且我必须使用 ScalaFutures(用于 ScalaTest)来测试我的异步方法。

所以我执行了这个模式,并创建了两个这样的方法:

def insert(person: Person): Future[IndexResponse] = {
    client.execute {
        index into "index" / "type" source person
    }
}

def insertToEs(person: Person): Unit = {
    insert(person) onComplete {
        case Success(s) => {
            logger.info("{} has been inserted successfully", person.toString)
            something_to_do()
        }
        case Failure(t) => logger.warn("An error has occured: {}", t.getMessage)
    }
}

所以现在测试我的第一个方法很容易,但是如何测试 insertToEs 方法呢?

更一般地说,我想创建集成测试:Kafka(嵌入式)到 Elasticsearch(嵌入式)。

我有这段代码调用了之前的 insertToEs 方法:

def receive: Unit = {
    ...
    val iterator = stream.iterator()
    while(iterator.hasNext) {
        insertToEs(iterator.next.message)
    }
}

我在接收方法上创建了一个测试,但看起来集成测试在方法执行之前就结束了。

@RunWith(classOf[JUnitRunner])
class ToEsSpec extends FlatSpec with Matchers with BeforeAndAfterAll with ScalaFutures {

  override def beforeAll = {
      run_kafka_server
      run_elasticsearch_server
  }

  override def afterAll = {
      shutdown
  }

  it should "receive message from kafka and insert to es" {

      send_to_kafka(json)

      receive

      assert if inserted in es
  }
}

你能给我建议吗?谢谢

【问题讨论】:

    标签: scala unit-testing asynchronous integration-testing future


    【解决方案1】:

    http://doc.scalatest.org/2.2.4/index.html#org.scalatest.concurrent.Futures

    在我的一些测试用例中,我使用了:以下 2 种模式:

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 2018-05-08
      • 2019-04-29
      • 2014-03-18
      • 2019-02-28
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多