使用 ScalaCheck 生成不带构造函数参数的对象
Using ScalaCheck to generate an object without constructor parameters
对于我的 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 的了解为零,所以如果我犯了 'obvious' 错误,请耐心等待 :) 我的专长是 Java,使用 ScalaCheck 进行测试是我第一次接触 Scala。
您需要return生成声明对象,而不是声明对象。生成器实际上是一个可以 return 声明对象的函数。我解决这个问题的正常方法是理解(其他人更喜欢 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
}
}
对于我的 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 的了解为零,所以如果我犯了 'obvious' 错误,请耐心等待 :) 我的专长是 Java,使用 ScalaCheck 进行测试是我第一次接触 Scala。
您需要return生成声明对象,而不是声明对象。生成器实际上是一个可以 return 声明对象的函数。我解决这个问题的正常方法是理解(其他人更喜欢 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
}
}