在断言之前等待插入完成

时间:2016-09-24 19:11:17

标签: scala integration-testing h2 slick

我有一个模型并在开始之前编写测试。现在我的问题是:虽然功能有效,但我的测试是不确定的。他们大部分时间都在工作,但有时却没有。我认为这是因为setAdapter

但是,让我们通过示例向您展示我的意思:

Future

我假设有时候before { db.run(animals.createTable) } after { db.run(animals.dropTable) } "An animal" must "have a unique id" in { val setup = DBIO.seq( animals.insert(Animal("Ape")), animals.insert(Animal("Dog")) ) db.run(setup) val result = db.run(animals.tableQuery.result).futureValue result shouldBe a[Seq[_]] result distinct.length shouldEqual 2 result(0).id should not equal result(1).id } 会及时完成,但有时却没有,因此我得到一个AssertionException“预期长度为2,实际为0”。如上所述,对我来说,它看起来像是一个“竞争条件”(我知道这不是正确的终点;))。

所以,我试过的只是等待insert语句的结果,如下所示:

db.run(setup)

但这并没有改变一件事。那为什么呢?有人可以向我解释为什么Await不阻止这里?我认为这会阻塞并且只执行插入执行后的行。

我也尝试在Await.ready(db.run(setup), Duration.Inf)块中包装断言,但也没有运气。

对我有任何暗示吗?

1 个答案:

答案 0 :(得分:1)

我怀疑你的问题是有时你的前钩子也没有完成,因为它也是异步的。我怀疑如果你在前一个块中添加一个while sleep 60m do grep -q connected /home/Desktop/1.txt || nmcli con up id "My VPN id" done 以及你的设置块,那么问题就会消失。