Hybris commerce - 同步集成测试
Hybris commerce - synchronization integration test
我是 hybris 电子商务的初学者。我需要同步产品目录的集成测试,但我在同步时遇到问题。我添加了新的产品属性 - “classification
”并在测试中为此属性设置了值。然后 performCronJob
方法从 Staged
产品目录做了 syncJob
,到 Online
产品目录。现在,当从 Online
目录中获取产品时,它没有“classification
”属性的值并出现 AssertionError
。请告诉我,为什么会这样。这是我的测试。
@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());
}
}
断言错误:
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)...
非常感谢。
我决定了我的问题。我只是扩展 ServicelayerTest
没有事务和同步成功。但我不明白为什么 Transactional
不起作用。
使用@Transactional意味着在你的测试初始化期间启动一个事务(在执行@Before之前)并回滚在你的测试之后(在执行@After 之后),所以你使用服务层实际保存的所有数据都不会提交到数据库,这就是为什么你看不到新属性的变化。
这似乎是不可预测的,因为您无法确定同步 cronjob 是否有足够的时间在您测试属性之前同步产品。
我是 hybris 电子商务的初学者。我需要同步产品目录的集成测试,但我在同步时遇到问题。我添加了新的产品属性 - “classification
”并在测试中为此属性设置了值。然后 performCronJob
方法从 Staged
产品目录做了 syncJob
,到 Online
产品目录。现在,当从 Online
目录中获取产品时,它没有“classification
”属性的值并出现 AssertionError
。请告诉我,为什么会这样。这是我的测试。
@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());
}
}
断言错误:
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)...
非常感谢。
我决定了我的问题。我只是扩展 ServicelayerTest
没有事务和同步成功。但我不明白为什么 Transactional
不起作用。
使用@Transactional意味着在你的测试初始化期间启动一个事务(在执行@Before之前)并回滚在你的测试之后(在执行@After 之后),所以你使用服务层实际保存的所有数据都不会提交到数据库,这就是为什么你看不到新属性的变化。
这似乎是不可预测的,因为您无法确定同步 cronjob 是否有足够的时间在您测试属性之前同步产品。