2016-01-16 17 views
1

Я кодирую простые начальные (http://slick.typesafe.com/doc/3.1.1/gettingstarted.html) примеры из документации Slick 3.1.1.Почему этот тест Slick непоследовательно терпит неудачу?

Я написал следующий тест, чтобы утверждать на счет кофе:

@Test def countCoffees() = { 

    // Read all coffees and print them to the console 
    val rf = db.run(coffees.result) 
    // Equivalent SQL code: 
    // select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES 

    val r = Await.result(rf, Duration.Inf) 

    assert(r.size == 5) 
    } 

Несколько раз пройти тест, а иногда результатом является следующее:

[info] - countCoffees *** FAILED *** 
[info] org.scalatest.junit.JUnitTestFailedError: Vector() had size 0 instead of expected size 5 (Test.scala:40) 

TestSuite определяется как следующим образом:

class SlickScalaEjemplo extends FunSuite with SchemaEjemplo 

Будучи SchemaEjemplo следующим

trait SchemaEjemplo extends FunSuite with SlickBase with BeforeAndAfter { 

    val setup = DBIO.seq(
    // Create the tables, including primary and foreign keys 
    (suppliers.schema ++ coffees.schema).create, 

    // Insert some suppliers 
    suppliers += (101, "Acme, Inc.", "99 Market Street", "Groundsville", "CA", "95199"), 
    suppliers += (49, "Superior Coffee", "1 Party Place", "Mendocino", "CA", "95460"), 
    suppliers += (150, "The High Ground", "100 Coffee Lane", "Meadows", "CA", "93966"), 
    // Equivalent SQL code: 
    // insert into SUPPLIERS(SUP_ID, SUP_NAME, STREET, CITY, STATE, ZIP) values (?,?,?,?,?,?) 

    // Insert some coffees (using JDBC's batch insert feature, if supported by the DB) 
    coffees ++= Seq(
     ("Colombian", 101, 7.99, 0, 0), 
     ("French_Roast", 49, 8.99, 0, 0), 
     ("Espresso", 150, 9.99, 0, 0), 
     ("Colombian_Decaf", 101, 8.99, 0, 0), 
     ("French_Roast_Decaf", 49, 9.99, 0, 0) 
    ) 
    // Equivalent SQL code: 
    // insert into COFFEES(COF_NAME, SUP_ID, PRICE, SALES, TOTAL) values (?,?,?,?,?) 
) 

    val setupFuture = db.run(setup) 

    after { 
    db.close() 
    } 

} 

Почему Await в этом тесте работает неправильно?

+0

Здесь не существует достаточно информации, чтобы ответить на этот вопрос. – Ryan

ответ

1

Проблема заключалась в том, что я не ждал следующего

val setupFuture = db.run(setup) 

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

Я изменил испытания следующим образом:

test("countCoffees") { 

    setupFuture.map(x => { 
     // Read all coffees and print them to the console 
     val rf = db.run(coffees.result) 
     // Equivalent SQL code: 
     // select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES 

     val r = Await.result(rf, Duration.Inf) 

     assert(r.size == 5) 
    }) 

    } 

Так выполнение различных Action с db.run выполняются на полной схеме и теперь тесты все зеленые.

Смежные вопросы