我正面臨着大問題實例化weblogic運行jUnit測試時的初始上下文。 應用程序使用Spring/hibernate/weblogic。 在應用程序代碼中,方法使用JMS代理向JMS發送消息,隊列在weblogic上設置。如何創建模擬/虛擬初始上下文Junit測試容器外
我的問題是當JUnit測試當前我需要保持weblogic服務器在本地機器上運行只是爲了初始化JMS代理中使用的WeblogicInitialContext。我的junit測試不需要發送任何東西到服務器,沒有JMS,沒有數據源。所有這些都受春季單元測試框架的管理。 我想爲我的junit測試解耦/擺脫Weblogic。請建議。 這裏是我的代碼:
這是我測試的應用程序上下文XML:
<beans xmlns="http://www.springframework.org/schema/beans"
...
>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<util:properties id="webLogicInitialContext">
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.security.principal">admin</prop>
<prop key="java.naming.security.credentials">password</prop>
</util:properties>
<jee:jndi-lookup id="responseProxyConnectionFactory"
jndi-name="jms/ConnectionFactory" environment-ref="webLogicInitialContext"/>
<bean id="responseProxyJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory"
ref="responseProxyConnectionFactory" />
</bean>
</beans>
這是一個Java類方法:
public class Order {
public void addOrder(OrderRequest addOrderRequest) {
PurchaseOrder newOrder = orderHelper.createOrder(addOrderRequest);
orderDaoHibernate.addOrder(newOrder);
responseProxy.send(newOrder);
}
}
我的測試:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({TransactionalTestExecutionListener.class, DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class })
@ContextConfiguration(locations={"/test-application-context.xml"})
@TransactionConfiguration(defaultRollback=true)
public class TestOrder {
@Test
@Transactional
public void testMyOrder(){
Order ord = new Order();
OrderRequest req = new OrderRequest();
....
ord.addOrder(req);
}
}
如果我運行這個測試,Spring框架嘗試加載WeblogicInitialContext,並且如果本地weblogic未運行,則會拋出異常。
當我從Junit調用此方法時,我不想發送任何JMS消息。 如何創建虛擬WeblogicInitialContext。
請幫忙。
異常的某些部分;
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'responseProxyConnectionFactory': Invocation of init method failed; nested exception is javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:7001: Destination unreachable; nested exception is:
這裏的一些解決方案:[如何在單元測試中模擬InitialContext構造函數](https://stackoverflow.com/q/36734275/772981)。 – Jarekczek 2017-06-29 07:32:34