Поведение при тестировании калитки - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь проверить метод вызывается при обновлении текстового поля. Однако похоже, что он не может заставить его работать, поскольку он, похоже, не запускает событие onUpdate.

Кажется, что произошло событие onError из-за попытки преобразовать нулевое значение.

org.apache.wicket.util.convert.ConversionException: Method [public long uk.co.cdl.strata.web.client.accounts.payment.PostUnderwriterTransactionContext.getNettAmount()]. Can't convert null value to a primitive class: long for setting it on uk.co.cdl.strata.web.client.accounts.payment.PostUnderwriterTransactionContext@67770b37

Похоже, что из-за того, что у него нет значения, возникает ошибка. Но я не уверен, как установить его значение перед запуском теста.

Мой тестовый пример:

    @Test
    public void shouldUseDefaultCaseForUpdatingAmount() {
        // Given
        setContext(1);
        setNettRated();
        testSubject = createAndStartPanel();

        // When
        tester.executeAjaxEvent(NETT_AMOUNT_ID, "change");

        // Then
        verify(mockNettViewController, times(1)).updateAmount(any());
    }

Вот как я настраиваю текстовое поле. Кажется, я никогда не запускаю событие onUpdate.

    protected TextField<Float> createNettAmountTextField(String id, String key) {
        CurrencyTextField currencyTextField = CurrencyTextField.createPenceCurrencyQuestion(id, new PropertyModel<Long>(getModel(), key));
        currencyTextField.setOutputMarkupId(true);
        currencyTextField.setOutputMarkupPlaceholderTag(true);
        currencyTextField.setVisible(isTransactionsTypeChoiceAvailable());
        if (amountInputValidator != null) {
            currencyTextField.add(amountInputValidator);
        }
        currencyTextField.add(new StopAutomaticValidationBehaviour());
        currencyTextField.add(new AjaxFormComponentUpdatingBehavior("change") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                updateValue(id);
                redrawComponents(target);
                send(getPage(), DEPTH, new AmountInputEvent(target));
            }

            @Override
            protected void onError(AjaxRequestTarget target, RuntimeException e) {
                target.add(currencyTextField);
                target.focusComponent(currencyTextField);
            }
        });
        return currencyTextField;
    }

Результат теста:

Wanted but not invoked:
mockNettViewController.updateAmount(<any>);
-> at uk.co.cdl.strata.web.client.accounts.payment.PostUnderwriterTransactionPanelTest.shouldUseDefaultCaseForUpdatingAmount(PostUnderwriterTransactionPanelTest.java:430)
...