我实际上是Grails世界的新人。我正在尝试为具有一些约束的域类编写测试用例。当我尝试运行单元测试时,我的对象上出现Null指针异常。在调试时我知道我的toString方法有一些可疑的东西导致对象设置为Null。我该怎么办?任何帮助都非常感谢。
这是我的域类:
@MultiTenant
class OrderCharge {
static scaffold = [
exclude: ['tenantId'],
]
static belongsTo = [
order: SalesOrder
]
MiscOrderCharges miscOrderCharges
Date lastUpdated
double quantity
double price
SapInvoiceRecord sapInvoice
static constraints = {
order(nullable: true)
quantity(min:1d)
miscOrderCharges()
sapInvoice(nullable: true)
}
String toString(){
def pattern = "\$##,###.00"
def currency = new DecimalFormat(pattern)
String rate = currency.format(miscOrderCharges.price)
return "$miscOrderCharges x$quantity"
}
}
这是我的单元测试用例:
import grails.test.mixin.TestFor
import spock.lang.Unroll
import spock.lang.Specification
@TestFor(OrderCharge)
//@TestMixin(GroovyPageUnitTestMixin)
class ChargeSpec extends Specification {
def setup() {
mockForConstraintsTests(
OrderCharge, [
new OrderCharge(order: Mock(SalesOrder),
miscOrderCharges: Mock(MiscOrderCharges),
quantity: 1.0,
price:20.0
/*, sapInvoice: Mock(SapInvoiceRecord) */
)
]
)
}
void validateConstraints(obj, field, error) {
def validated = obj.validate()
if (error && error != 'valid') {
assert !validated
assert obj.errors[field]
assert error == obj.errors[field]
} else {
assert !obj.errors[field]
}
}
@Unroll("test inventory all constraints #field is #error")
def "test Charge all constraints"() {
given:
def obj = new OrderCharge("$field": val)
expect:
validateConstraints(obj, field, error)
where:
error |field |val
'nullable' |'orderCharge' |null
'nullable' |'sapInvoice' |null
'min' |'quantity' |-1
'min' |'price' |0
}
}
提前致谢。
答案 0 :(得分:0)
唯一突然出现在我身上的是你在toString()中的回归。
return "$miscOrderCharges x$quantity"
你在那里使用gStrings。我的理解是,可以使用简单的$表示法引用单个变量,如格式 $ somevariable ,而表达式的格式为 $ {expression} 。
在您的陈述中 x $ quantity 似乎是一个错字。你的意思是将它们乘以如下表达式吗?
return "${miscOrderCharges * quantity}"
有关详细信息,请参阅http://groovy.jmiguel.eu/groovy.codehaus.org/Strings+and+GString.html。