2016-09-17 2 views
1

Я новичок в гибриде е-коммерции. Мне нужен интеграционный тест с каталогами каталогов синхронизации, но у меня проблема при синхронизации. Я добавил атрибут нового продукта - «classification» и установил значение для этого атрибута в тесте. Тогда performCronJob способ сделал syncJob из Staged товар каталог, Online товар каталог. Теперь, когда вы получили товар из каталога Online, он не имеет значения для атрибута «classification» и происходит AssertionError. Скажите, пожалуйста, почему это происходит. Это мой тест.Hybris commerce - интеграция интеграции интеграции

@RunWith(HybrisJUnit4ClassRunner.class) 
@RunListeners(
{ TransactionRunListener.class, ItemCreationListener.class, LogRunListener.class, PlatformRunListener.class }) 
@Transactional 
public class ProductMyIntegrationTest extends ServicelayerTransactionalTest 
{ 
    @Resource 
    private TypeService typeService; 
    @Resource 
    private ModelService modelService; 
    @Resource 
    private CatalogVersionService catalogVersionService; 
    @Resource 
    private ProductService productService; 
    @Resource 
    private CronJobService cronJobService; 

    public ProductService getProductService() 
    { 
     return productService; 
    } 

    public CatalogVersionService getCatalogVersionService() 
    { 
     return catalogVersionService; 
    } 

    public TypeService getTypeService() 
    { 
     return typeService; 
    } 

    public ModelService getModelService() 
    { 
     return modelService; 
    } 

    @Test 
    public void testProductSyncBehavior() 
    { 
     final CatalogVersionModel catalogStagedVersionModel = getCatalogVersionService().getCatalogVersion("hybrisProductCatalog", 
       "Staged"); 
     final CatalogVersionModel catalogOnlineVersionModel = getCatalogVersionService().getCatalogVersion("hybrisProductCatalog", 
       "Online"); 
     final Collection<CatalogVersionModel> coll = new ArrayList<>(); 
     coll.add(catalogOnlineVersionModel); 
     coll.add(catalogStagedVersionModel); 
     catalogVersionService.setSessionCatalogVersions(coll); 

     final ProductModel product = productService.getProduct(catalogStagedVersionModel, "0100"); 
     product.setClassification("RRRRRRR"); 
     getModelService().save(product); 

     cronJobService.performCronJob((CatalogVersionSyncCronJobModel) modelService.get(PK.fromLong(8796453503477L)), true); 

     final ProductModel prodOnline = modelService.get(productService.getProduct(catalogOnlineVersionModel, "0100").getPk()); 
     final ProductModel prodStaged = modelService.get(productService.getProduct(catalogStagedVersionModel, "0100").getPk()); 
     Assert.assertNotNull(prodOnline.getClassification()); 
    } 
} 

AssertionError:

java.lang.AssertionError 
    at org.junit.Assert.fail(Assert.java:86) 
    at org.junit.Assert.assertTrue(Assert.java:41) 
    at org.junit.Assert.assertNotNull(Assert.java:712) 
    at org.junit.Assert.assertNotNull(Assert.java:722) 
    at de.hybris.merchandise.core.product.classification.ProductMyIntegrationTest.testProductSyncBehavior(ProductMyIntegrationTest.java:91) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source)... 

Большое спасибо.

ответ

0

Я решил свою проблему. Я просто расширяю ServicelayerTest без транзакции и синхронизации. Но я не понял, почему с Transactional не работает.

0

Использование @Transactional означает, что транзакция начинается при инициализации теста (до @Before выполняется) и откат после теста (после @After выполняется), так что все данные, которые вы на самом деле сохранить использование уровня сервиса никогда не привязано к базе данных, поэтому вы не можете увидеть изменение для нового атрибута.

И это кажется непредсказуемым, поскольку у вас нет способа убедиться, что синхронизация cronjob будет иметь достаточно времени для синхронизации продукта, прежде чем вы проверите свой атрибут.

Смежные вопросы