2011-11-10 53 views
3

我想写一些代码来测试数据库模型。测试框架和数据库框架都使用“===”运算符,并且测试框架被优先考虑。我如何明确使用一种方法或另一种方法?斯卡拉冲突的继承方法名称

例子:

import org.scalatest.FunSuite 

class TestDBModels extends FunSuite{ 
    test("Test DoublePropertyEntry with a few new values") { 
    Schemas.doubleProperties.deleteWhere(p => (p.id === p.id))) 
    } 
} 

错误:

type mismatch; 
found : Option[String] 
required: org.squeryl.dsl.ast.LogicalBoolean 
Schemas.doubleProperties.deleteWhere(p => (p.===(p.id, p.id))) 

回答

3

你有多种选择。第一个也是最简单的是使用显式方法调用,而不是隐式转换。例如,要明确地使用scalatest ===:

Schemas.doubleProperties.deleteWhere(p => (convertToEqualizer(p.id) === p.id))) 

如果太长,你可以缩短名称:

def toEq(left: Any) = convertToEqualizer(left: Any) 
Schemas.doubleProperties.deleteWhere(p => (toEq(p.id) === p.id))) 

convertToEqualizer是scalatest隐式转换方法。另一个选择是重写convertToEqualizer作为非隐式方法:

override def convertToEqualizer(left: Any) = new Equalizer(left) 

这将停止这个特定的隐式转换的发生。请参阅scalatest documentation for Assertions objectsame question on the scalatest-users mailing list

+0

这里重要的一点是隐式def的覆盖,对某些不隐含的内容。这将关闭自动使用scalatest的'==='方法。然后,**如果你想使用断言和scalatest的'===',你可以明确地调用convertToEqualizer,或者简单地使用'new Equalizer'。就个人而言,我会使用'ShouldMatchers'来代替,因为我更喜欢'a应该等于(b)'到更强制性的声明'assert(a === b)',或者在这种情况下,'assert(toEq(a)== = b)'。 –

+0

@LuigiPlinge编辑澄清一点。 –