对于我的Java应用程序,我正在尝试使用ScalaCheck编写一些基于属性的单元测试。为此我需要生成器,但我能找到的所有教程都使用带参数的构造函数来生成对象。 我需要生成的对象没有构造函数参数,我不能添加这样的构造函数,因为它来自外部库。
我现在有以下内容(JwtClaims来自org.jose4j.jwt包):
def genClaims: Gen[JwtClaims] = {
val url = arbString
val username = arbString
val claims = new JwtClaims()
claims.setNotBeforeMinutesInThePast(0)
claims.setExpirationTimeMinutesInTheFuture(60)
claims.setSubject(username) // error about Gen[String] not matching type String
claims
}
有关如何编写生成器的任何建议?我对Scala一无所知,所以如果我犯了一个“明显的”错误,请耐心等待:)我的专业知识是Java,使用ScalaCheck进行测试是我第一次进入Scala。
答案 0 :(得分:3)
您需要返回声明对象的生成器,而不是声明对象。生成器实际上是一个可以返回声明对象的函数。我这样做的正常方法是理解(其他人更喜欢flatMap,但我认为这更清楚)。
def genClaims: Gen[JwtClaims] = {
for {
url <- arbitrary[String]
username <- arbitrary[String]
} yield {
val claims = new JwtClaims()
claims.setNotBeforeMinutesInThePast(0)
claims.setExpirationTimeMinutesInTheFuture(60)
claims.setSubject(username)
claims
}
}