2013-11-08 3 views
0

Весной, как использовать контекст paramters в коте месте Conf/context.xml в тестировании JUnit или как создать параметры контекста в JUnitИспользуйте параметры контекста в JUnit тест

<Context> 
    <Parameter name="mail_host" value="smtp.gmail.com" override="true"/> 
</Context> 

Я, реализующий выше параметров в моем коде, как указано ниже
@Value ("# {contextParameters.mail_host}"). Он работает нормально, когда я использую tomcat.

Но я получаю сообщение об ошибке «поле или свойство„contextParameters“не может быть найден на объект типа„org.springframework.beans.factory.config.BeanExpressionContext“ при работе в JUnit

Пожалуйста, помогите мне, Я боюсь в этом пункте. Спасибо заранее

+0

Как получить доступ к параметрам контейнера tomcat в junit.Это очень сложно, есть ли какие-либо возможности для этого? – basith

ответ

1

Вы можете построить JNDI перед тем, как запустить тест, и в своем тесте вы можете получить информацию из контекста. Взгляните на этот пример, как он имитирует инъекционный источник данных, используя jndi here. И ваш контекст будет выглядеть примерно так (в реальном коте)

<Resource name="jdbc/TestDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="root" 
      password="password" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/mysql"/> 

Итак, теперь мы хотим, чтобы имитировать это как если бы мы извлечь его с помощью JNDI. Итак, в тестовом листинге JUnit мы хотели бы настроить Before class. Обратите внимание, что здесь не вся информация отображается (построение источника данных в @Before), но вы поняли суть.

@BeforeClass 
    public static void setUpClass() throws Exception { 
     // rcarver - setup the jndi context and the datasource 
     try { 
      // Create initial context 
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
       "org.apache.naming.java.javaURLContextFactory"); 
      System.setProperty(Context.URL_PKG_PREFIXES, 
       "org.apache.naming");    
      InitialContext ic = new InitialContext(); 

      ic.createSubcontext("java:"); 
      ic.createSubcontext("java:/comp"); 
      ic.createSubcontext("java:/comp/env"); 
      ic.createSubcontext("java:/comp/env/jdbc"); 

      // Construct DataSource 
      OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource(); 
      ds.setURL("jdbc:oracle:thin:@host:port:db"); 
      ds.setUser("MY_USER_NAME"); 
      ds.setPassword("MY_USER_PASSWORD"); 

      ic.bind("java:/comp/env/jdbc/nameofmyjdbcresource", ds); 
     } catch (NamingException ex) { 
      Logger.getLogger(MyDAOTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

и в тесте вы можете получить этой информацию

Context initContext = new InitialContext(); 
     Context webContext = (Context)initContext.lookup("java:/comp/env"); 

     DataSource ds = (DataSource) webContext.lookup("jdbc/nameofmyjdbcresource"); 

Надеется, что это помогает. EDIT , например.

MyMailHost mailHost = new MyMailHost(); 
mailHost.setName("mail_host"); 
mailHost.setValue("smtp.gmail.com"); 
mailHost.setOverride(true); 

ic.bind("java:/comp/env/jdbc/mymailhost", mailHost); 

in @Test 
Context initContext = new InitialContext(); 
      Context webContext = (Context)initContext.lookup("java:/comp/env"); 

      MyMailHost ds = (MyMailHost) webContext.lookup("jdbc/mymailhost"); 
+0

привет спасибо за ваш ответ, но я хочу установить или использовать параметр 'mail_host', в то время как junit тестирует, как это сделать. Пожалуйста, помогите мне. – basith

+0

Да, вы бы сделали то же самое, но вместо использования OracleConnectionPoolDataSource вы бы использовали свой собственный POJO. я обновлю ответ. – kyla

+0

Большое спасибо за ваш ответ, но я получаю ту же ошибку в junit, используя @Value ("# {contextParameters.mail_host}") во всем моем приложении для доступа к параметру mail_host в context.xml. Но я получаю сообщение об ошибке 'Поле или свойство' contextParameters 'не может быть найдено на объекте типа' org.springframework.beans.factory.config.BeanExpressionContext 'при работе в junit' Пожалуйста, помогите мне – basith

0

Одно из решений, которые я использовал это незавершенное параметры контекста в моем тестовом файле весной ApplicationContext с помощью простого свойства компонента. Так что в вашем случае:

<util:properties id="contextParameters"> <prop key="mail_host">smtp.gmail.com</prop> </util:properties>

Это самый простой способ справиться с этим. Надеюсь, это поможет!

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