为什么要在scalatest套件中的TestSuiteMixIn特征中按什么顺序混合?

问题描述 投票:0回答:1

我创建了以下灯具:

trait DatabaseFixture extends TestSuiteMixin { this: TestSuite =>

    // Just setting up a test database
    val cpds = new ComboPooledDataSource
    val url : URL = getClass.getResource( "c3p0.properties" )
    val db = Database.forDataSource(cpds, Some(50))
    val users = Schema.users
    val instances = Schema.instances

    Await.result(db.run( DBIO.seq(
        users.schema.create,
    ) ), 3 seconds )

    abstract override def withFixture(test: NoArgTest): Outcome = {
        try super.withFixture(test)
        finally cpds.close()
    }
}

trait UserControllerFixture extends DatabaseFixture with ScalatraSuite { this: TestSuite =>
    addServlet( new UserController(db), "/user/*" )

    abstract override def withFixture(test: NoArgTest): Outcome = {
        super.withFixture( test )
    }
}

这是我将它们混入测试套件的第一种方法:

class UserControllerTestSuite extends DatabaseFixture with ScalatraSuite with FlatSpecLike with Matchers {

    "POST to /user/add" should "return 201 for created" in {

        post( "/instance/add" ) {
            status shouldBe  201
        }
    }

}

此编译失败,出现以下错误:method withFixture in trait TestSuite of type (test: UserControllerTestSuite.this.NoArgTest)org.scalatest.Outcome has weaker access privileges; it should be public

但是,当我将灯具和其他最烂的特征混合在一起时,它可以很好地编译:class UserControllerTestSuite extends ScalatraSuite with FlatSpecLike with Matchers with DatabaseFixture { "POST to /user/add" should "return 201 for created" in { post( "/instance/add" ) { status shouldBe 201 } } }

这里发生了什么? withFixture()具有“较弱的访问权限”是什么意思? 

[我创建了以下装置:特性DatabaseFixture扩展了TestSuiteMixin {this:TestSuite => //只需设置测试数据库val cpds = new ComboPooledDataSource val url:...

scala overriding traits scalatest fixtures
1个回答
0
投票
Scala中的Mixins从右到左扫描。这就是为什么在代码可以正常工作的情况下,DatabaseFixture在其他特征之前被调用的原因。
© www.soinside.com 2019 - 2024. All rights reserved.