Тестовый пример Junit для конвертации в конвертер - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь смоделировать метод преобразователей, используя 'when --- thenReturn' в моем файле serviceTest, но все еще с его исключающей ошибкой нулевого указателя. Есть ли хороший способ издеваться над конвертором? Заранее спасибо.

1 Ответ

1 голос
/ 09 апреля 2020

Например, вы можете обратиться к тестовым классам OOTB. (Примечание. Классы используют данный-willReturn, но вы можете настроить его для when-thenReturn. Это просто разные подходы к тестированию с использованием Mockito)

Если вы ищете конвертер, проверяющий значения его атрибутов, установите флажок de.hybris.platform.commercefacades.user.converters.populator.AddressPopulatorTest.

@UnitTest
public class AddressPopulatorTest
{
    private AbstractPopulatingConverter<AddressModel, AddressData> addressConverter;

    private final AddressPopulator addressPopulator = new AddressPopulator();

    @Mock
    private Map<String, Converter<AddressModel, StringBuilder>> addressFormatConverterMap;
    @Mock
    private Converter<AddressModel, StringBuilder> defaultAddressFormatConverter;

    @Before
    public void setUp()
    {
        MockitoAnnotations.initMocks(this);
        addressPopulator.setAddressFormatConverterMap(addressFormatConverterMap);
        addressPopulator.setDefaultAddressFormatConverter(defaultAddressFormatConverter);

        addressConverter = new ConverterFactory<AddressModel, AddressData, AddressPopulator>().create(AddressData.class,
                addressPopulator);
    }

    @Test
    public void testConvert()
    {
        final AddressModel addressModel = mock(AddressModel.class);
        final PK pk = PK.parse("123");
        final TitleModel titleModel = mock(TitleModel.class);
        final CountryModel countryModel = mock(CountryModel.class);
        given(addressModel.getPk()).willReturn(pk);
        given(addressModel.getBillingAddress()).willReturn(Boolean.TRUE);
        given(addressModel.getShippingAddress()).willReturn(Boolean.TRUE);
        given(addressModel.getTitle()).willReturn(titleModel);
        given(addressModel.getFirstname()).willReturn("firstName");
        given(addressModel.getLastname()).willReturn("lastname");
        given(titleModel.getName()).willReturn("titleName");
        given(titleModel.getCode()).willReturn("titleCode");
        given(addressModel.getCompany()).willReturn("companyName");
        given(addressModel.getLine1()).willReturn("line1");
        given(addressModel.getLine2()).willReturn("line2");
        given(addressModel.getTown()).willReturn("town");
        given(addressModel.getPostalcode()).willReturn("postalCode");
        given(addressModel.getPhone1()).willReturn("phone");
        given(addressModel.getEmail()).willReturn("email");
        given(addressModel.getCountry()).willReturn(countryModel);
        given(countryModel.getIsocode()).willReturn("countryCode");
        given(countryModel.getName()).willReturn("countryName");
        given(defaultAddressFormatConverter.convert(Mockito.any(AddressModel.class))).willReturn(
                new StringBuilder("singleLineAddress"));
        final AddressData addressData = addressConverter.convert(addressModel);
        Assert.assertEquals("123", addressData.getId());
        Assert.assertTrue(addressData.isBillingAddress());
        Assert.assertTrue(addressData.isShippingAddress());
        Assert.assertEquals("titleName", addressData.getTitle());
        Assert.assertEquals("titleCode", addressData.getTitleCode());
        Assert.assertEquals("firstName", addressData.getFirstName());
        Assert.assertEquals("lastname", addressData.getLastName());
        Assert.assertEquals("companyName", addressData.getCompanyName());
        Assert.assertEquals("line1", addressData.getLine1());
        Assert.assertEquals("line2", addressData.getLine2());
        Assert.assertEquals("town", addressData.getTown());
        Assert.assertEquals("postalCode", addressData.getPostalCode());
        Assert.assertEquals("phone", addressData.getPhone());
        Assert.assertEquals("email", addressData.getEmail());
        Assert.assertEquals("countryCode", addressData.getCountry().getIsocode());
        Assert.assertEquals("countryName", addressData.getCountry().getName());
    }
}

Если вы ищете фасад, использующий конвертер, отметьте de.hybris.platform.commercefacades.customer.impl.DefaultCustomerFacadeTest

@UnitTest
public class DefaultCustomerFacadeTest
{
    private static final String TEST_DUMMY = "dummy";
    private static final String TEST_OLD_PASS = "oldPass";
    private static final String TEST_NEW_PASS = "newPass";
    private static final String TEST_USER_UID = "testUid";
    private static final String TEST_TOKEN = "token";
    private DefaultCustomerFacade defaultCustomerFacade;


    @Mock
    private UserService userService;
    @Mock
    private UserModel user;
    @Mock
    private CustomerAccountService customerAccountService;
    @Mock
    private ModelService mockModelService;
    @Mock
    private AbstractPopulatingConverter<AddressModel, AddressData> addressConverter;
    @Mock
    private AbstractPopulatingConverter<UserModel, CustomerData> customerConverter;
    @Mock
    private AddressReversePopulator addressReversePopulator;
    @Mock
    private AbstractPopulatingConverter<CreditCardPaymentInfoModel, CCPaymentInfoData> creditCardPaymentInfoConverter;
    @Mock
    private CommonI18NService commonI18NService;
    @Mock
    private StoreSessionFacade storeSessionFacade;
    @Mock
    private CartService cartService;
    @Mock
    private CommerceCartService commerceCartService;
    @Mock
    private UserFacade userFacade;
    @Mock
    private SessionService sessionService;
    @Mock
    private OrderFacade orderFacade;
    @Mock
    private CartCleanStrategy cartCleanStrategy;

    private CustomerModel customerModel;

    private CustomerModel guestCustomerModel;

    private AddressModel addressModel;

    private AddressModel addressModel2;

    private AddressData addressData;

    private CreditCardPaymentInfoModel creditCardPaymentInfoModel;

    private CCPaymentInfoData ccPaymentInfoData;

    private CustomerNameStrategy customerNameStrategy;

    private CurrencyData defaultCurrencyData;

    private LanguageData defaultLanguageData;

    protected static class MockAddressModel extends AddressModel
    {
        private final long id;

        public MockAddressModel(final long id)
        {
            this.id = id;
        }

        @Override
        public PK getPk()
        {
            return de.hybris.platform.core.PK.fromLong(id);
        }
    }


    @Before
    public void setUp()
    {
        MockitoAnnotations.initMocks(this);

        defaultCustomerFacade = new DefaultCustomerFacade();
        defaultCustomerFacade.setUserService(userService);
        defaultCustomerFacade.setModelService(mockModelService);
        defaultCustomerFacade.setCustomerAccountService(customerAccountService);
        defaultCustomerFacade.setAddressConverter(addressConverter);
        defaultCustomerFacade.setCustomerConverter(customerConverter);
        defaultCustomerFacade.setAddressReversePopulator(addressReversePopulator);
        defaultCustomerFacade.setCreditCardPaymentInfoConverter(creditCardPaymentInfoConverter);
        defaultCustomerFacade.setCommonI18NService(commonI18NService);
        defaultCustomerFacade.setStoreSessionFacade(storeSessionFacade);
        defaultCustomerFacade.setCartService(cartService);
        defaultCustomerFacade.setCommerceCartService(commerceCartService);
        defaultCustomerFacade.setUserFacade(userFacade);
        defaultCustomerFacade.setSessionService(sessionService);
        defaultCustomerFacade.setOrderFacade(orderFacade);
        defaultCustomerFacade.setCartCleanStrategy(cartCleanStrategy);

        customerNameStrategy = new DefaultCustomerNameStrategy();

        defaultCustomerFacade.setCustomerNameStrategy(customerNameStrategy);

        addressModel = new MockAddressModel(9999L);
        addressModel2 = new MockAddressModel(8888L);
        addressData = new AddressData();
        addressData.setId("9999");

        customerModel = new CustomerModel();
        customerModel.setDefaultShipmentAddress(addressModel2);

        creditCardPaymentInfoModel = new CreditCardPaymentInfoModel();
        final List<CreditCardPaymentInfoModel> creditCards = new ArrayList<CreditCardPaymentInfoModel>();
        creditCards.add(creditCardPaymentInfoModel);
        ccPaymentInfoData = new CCPaymentInfoData();

        guestCustomerModel = new CustomerModel();
        guestCustomerModel.setUid(TEST_USER_UID + "|" + TEST_DUMMY);
        guestCustomerModel.setDefaultShipmentAddress(addressModel);
        guestCustomerModel.setDefaultPaymentAddress(addressModel2);

        given(addressConverter.convert(addressModel)).willReturn(addressData);
        given(creditCardPaymentInfoConverter.convert(creditCardPaymentInfoModel)).willReturn(ccPaymentInfoData);
        given(userService.getCurrentUser()).willReturn(customerModel);
        given(customerAccountService.getAddressForCode(customerModel, "9999")).willReturn(addressModel);
        given(customerAccountService.getCreditCardPaymentInfos(customerModel, true)).willReturn(creditCards);
        given(customerAccountService.getCreditCardPaymentInfoForCode(customerModel, "code")).willReturn(creditCardPaymentInfoModel);
        given(mockModelService.create(CustomerModel.class)).willReturn(new CustomerModel());

        defaultCurrencyData = new CurrencyData();
        defaultCurrencyData.setIsocode("GBP");

        defaultLanguageData = new LanguageData();
        defaultLanguageData.setIsocode("en");

        given(storeSessionFacade.getDefaultCurrency()).willReturn(defaultCurrencyData);
        given(storeSessionFacade.getDefaultLanguage()).willReturn(defaultLanguageData);
    }
...