2012-09-14 64 views
1

我試圖讓Broadleaf Commerce運行在一個簡單的JUnit單元測試,作爲概念的證明,看看我是否可以做基本的購物車操作,如添加到購物車,更新數量,並下訂單 - 沒有UI。越來越broadleaf在單元測試運行

的想法,看看我是否可以使用完全不同的UI與闊葉作爲後端。

到目前爲止,這已經有點粗糙就此開始工作(只是爲了讓Spring上下文並運行在所有)。我正在使用Gradle構建我的項目。配置如下所示:

測試類:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ 
    "MyTest.xml", 
}) 
public class BltMainTest { 

@Test 
public void test() { 
    System.out.println("THIS IS A TEST"); 
} 

} 

MyTest.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     "> 

<import resource="classpath:bl-framework-applicationContext-persistence.xml"/> 
<import resource="classpath:bl-framework-applicationContext-entity.xml"/> 
<import resource="classpath:bl-framework-applicationContext-workflow.xml"/> 
<import resource="classpath:bl-framework-applicationContext.xml"/> 
<import resource="classpath:bl-profile-applicationContext.xml"/> 
<import resource="classpath:bl-profile-applicationContext-entity.xml"/> 
<import resource="classpath:bl-profile-applicationContext-persistence.xml"/> 

</beans> 

的build.gradle摘錄(不得不做一個黑客位的獲得了Ehcache來對着幹Maven Central,不完全確定爲什麼):

... 
dependencies { 
... 
compile 'net.sf.ehcache:ehcache-core:2.6.0' 

compile('org.broadleafcommerce:broadleaf-framework:1.6.1-GA') { 
    exclude module: 'ehcache-terracotta' 
    exclude module: 'ehcache' 
} 
compile('org.broadleafcommerce:broadleaf-profile:1.6.1-GA') { 
    exclude module: 'ehcache-terracotta' 
    exclude module: 'ehcache' 
} 
... 
} 

我得到的堆棧跟蹤相當長,但是最底部(我相信相關的)部分是這樣的:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'blEntityManagerFactorySecureInfo' defined in class path resource [bl-framework-applicationContext-persistence.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.findEntityManagerFactory(EntityManagerFactoryUtils.java:99) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findNamedEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:511) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:493) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:657) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:630) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:339) 
    ... 55 more 
Caused by: java.lang.NullPointerException 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:527) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:268) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 69 more 

從看它似乎有一個沒有被指定持久性單元的類 - 但我不知道到哪裏糾正這種。

最重要的是 - 當我改變我的config.xml文件中的春進口線的順序錯誤發生變化。

也許我正在接近這個錯誤的方式,但我假設我應該能夠通過在正確的序列中包含默認的Broadleaf Spring XML來實現這個工作 - 但我已經嘗試了一些它們,並且沒有骰子(一些相同的錯誤,一些不同的,全部不好)。

如何得到這個工作任何想法?

回答

0

挖掘到這之後多一點我沒有得到這方面的工作。一些具體的事情都必須:

  1. 在原崗位的堆棧跟蹤是由兩個不同的Spring上下文文件中所定義的blPersistenceUnitManager豆(不知道如何將這些正在以正常的闊葉設置合併),一個引起壓倒對方。將該溶液導入結合了配置,以便從每個所需的持久性單元的讀出之後的所有定義一個。
  2. 我不得不明確地使用3.6.8.Final Hibernate庫,而不是最新的4.x(一些奇怪的錯誤,無法弄清楚如何處理Map類型的列)
  3. blPasswordEncoder bean有要定義
  4. 注:blCacheManager豆在下面的例子中被要求來解決的問題與的EHCache:http://jira.broadleafcommerce.org/browse/BLC-599

下面是解決了所有的Spring上下文的膽量:

<import resource="classpath:bl-common-applicationContext.xml"/> 

<import resource="classpath:bl-framework-applicationContext.xml"/> 
<import resource="classpath:bl-profile-applicationContext.xml"/> 

<import resource="classpath:bl-framework-applicationContext-workflow.xml"/> 

<import resource="classpath:bl-framework-applicationContext-persistence.xml"/> 
<import resource="classpath:bl-profile-applicationContext-persistence.xml"/> 

<import resource="classpath:bl-framework-applicationContext-entity.xml"/> 
<import resource="classpath:bl-profile-applicationContext-entity.xml"/> 

<bean id="blCacheManager" class="org.broadleafcommerce.common.extensibility.cache.ehcache.MergeEhCacheManagerFactoryBean"> 
    <property name="shared" value="true"/> 
</bean> 

<bean id="blPersistenceUnitManager" class="org.broadleafcommerce.common.extensibility.jpa.MergePersistenceUnitManager"> 
    <property name="persistenceXmlLocations"> 
     <list> 
      <value>classpath*:/META-INF/persistence-common.xml</value> 
      <value>classpath*:/META-INF/persistence-framework.xml</value> 
      <value>classpath*:/META-INF/persistence-profile.xml</value> 
     </list> 
    </property> 
</bean> 

<bean id="blPasswordEncoder" class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder"/> 

這讓我到單元測試構建點,運行時,Hibernate環境火了,我可以@Resource()的東西,等等。不知道它的功能如何,但我想我會發布這個問題的答案,因爲我得到了那麼多。