私が持っているメソッドの 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);
} ...
私のテストは、 isNew パラメータの値として渡された true でこのメソッドが呼び出されると、有効な InvoiceView オブジェクトが返されることをアサートしようとしているだけです。
私の spock テストでは、メソッドから返されると予想されるいくつかのオブジェクトを作成します。
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
}