我正在嘗試使用spock爲我有的方法編寫測試。spock測試中的對象比較失敗
的方法是這樣的 -
InvoiceView getInvoiceDetailView(String invoiceNumber, Boolean isNew) {
InvoiceView detailView;
if (isNew) {
newInvoiceDao.em = billingEm;
//call InvoiceDao
List<GroovyRowResult> invoiceSummaryRowResult = billingAdmin.rows(InvoiceQueries.GET_NEW_INVOICE_SUMMARIES_BY_NUMBER, [invoiceNumber:invoiceNumber]);
List<GroovyRowResult> invoiceDetailsRowResult = billingAdmin.rows(InvoiceQueries.GET_NEW_INVOICE_DETAILS_BY_NUMBER, [invoiceNumber:invoiceNumber]);
InvoiceModel invoiceModel = newInvoiceDao.getInvoice(invoiceNumber);
detailView = new InvoiceView(invoice:invoiceModel,
summary:invoiceSummaryRowResult,
details:invoiceDetailsRowResult);
} ...
我的測試只是想斷言,當調用此方法與真正的傳遞作爲是否新款參數的值,則返回一個有效InvoiceView對象。
在我的斯波克測試中,我創建了一些對象,我期望能夠從方法返回:
def expectedInvoiceModel = new InvoiceModel()
def expectedInvoiceSummaryRowResult = new ArrayList<GroovyRowResult>()
def expectedInvoiceDetailsRowResult = new ArrayList<GroovyRowResult>()
def expectedInvoiceView = new InvoiceView(invoice:expectedInvoiceModel,
summary:expectedInvoiceSummaryRowResult,
details:expectedInvoiceDetailsRowResult)
我還嘲笑我會被調用到DAO對象:
def setup() {
...
service.billingAdmin = Mock(Sql)
...
}
所以最後到Spock夾具上。我將違規的比較行註釋掉了,並且有一個解決方法。我的問題是 - 爲什麼我的「then」塊中的第一行失敗?
def "getInvoiceDetailView returns valid InvoiceView for new invoice"() {
given:
service.billingAdmin.rows(InvoiceQueries.GET_NEW_INVOICE_SUMMARIES_BY_NUMBER, [invoiceNumber:invoiceNumber]) >> expectedInvoiceSummaryRowResult
service.billingAdmin.rows(InvoiceQueries.GET_NEW_INVOICE_DETAILS_BY_NUMBER, [invoiceNumber:invoiceNumber]) >> expectedInvoiceDetailsRowResult
service.newInvoiceDao.getInvoice(_) >> expectedInvoiceModel
when:
def result = service.getInvoiceDetailView(invoiceNumber, true)
then:
//result == expectedInvoiceView -- Why doesn't this work?
result.invoice == expectedInvoiceModel
result.summary == expectedInvoiceSummaryRowResult
result.details == expectedInvoiceDetailsRowResult
}
這是我想通問題是。我在類定義之上插入了規範的常規註釋,但這並沒有幫助,比較檢查仍然失敗。不知道如何解決這個問題... –
只需在調試器中運行測試。 –