स्प्रिंग 3.1.2, जुनीट 4.10.0 का उपयोग कर ऑटोवॉयरिंग काम नहीं कर रहा है, और दोनों संस्करणों के लिए बिल्कुल नया है। मुझे समस्या है कि मुझे काम करने के लिए एनोटेशन-आधारित ऑटोवायरिंग नहीं मिल सकती है।स्प्रिंग 3.1.2, जुनीट 4.10.0
नीचे दो नमूने हैं, जो एनोटेशन का उपयोग नहीं कर रहे हैं, जो ठीक काम कर रहा है। और दूसरा एनोटेशन का उपयोग कर रहा है, जो काम नहीं करता है, और मुझे कारण नहीं मिला है। मैंने वसंत-एमवीसी-टेस्ट के नमूने का बहुत कुछ पालन किया।
कार्य:
package com.company.web.api;
// imports
public class ApiTests {
@Test
public void testApiGetUserById() throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/com/company/web/api/ApiTests-context.xml");
UserManagementService userManagementService = (UserManagementService) ctx.getBean("userManagementService");
ApiUserManagementController apiUserManagementController = new ApiUserManagementController(userManagementService);
MockMvc mockMvc = standaloneSetup(apiUserManagementController).build();
// The actual test
mockMvc.perform(get("/api/user/0").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
}
}
असफल, क्योंकि userManagementService
रिक्त है, autowired हो रही नहीं:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration // should default to ApiTests-context.xml in same package
public class ApiTests {
@Autowired
UserManagementService userManagementService;
private MockMvc mockMvc;
@Before
public void setup(){
// SetUp never gets called?!
}
@Test
public void testGetUserById() throws Exception {
// !!! at this point, userManagementService is still null - why? !!!
ApiUserManagementController apiUserManagementController
= new ApiUserManagementController(userManagementService);
mockMvc = standaloneSetup(apiUserManagementController).build();
// The actual test
mockMvc.perform(get("/api/user/0").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
}
}
ध्यान दें कि दोनों परीक्षण वर्गों ऊपर उसी संदर्भ विन्यास का उपयोग करना चाहिए, और उपयोगकर्ता प्रबंधन सेवा को वहां परिभाषित किया गया है।
ApiTests-context.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"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="user"/>
<property name="password" value="passwd"/>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSource" p:mappingResources="company.hbm.xml">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
</entry>
</map>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/>
<!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->
<context:annotation-config/>
<tx:annotation-driven/>
<context:mbean-export/>
<!-- tried both this and context:component-scan -->
<!--<bean id="userManagementService" class="com.company.web.hibernate.UserManagementServiceImpl"/>-->
<context:component-scan base-package="com.company"/>
<!-- Hibernate's JMX statistics service -->
<bean name="application:type=HibernateStatistics" class="org.hibernate.jmx.StatisticsService" autowire="byName"/>
</beans>
और UserManagementService (इंटरफेस) के साथ-साथ UserManagementServiceImpl @Service
एनोटेशन है।
दो मामूली प्रश्न/टिप्पणियां: सेटअप() कभी भी कॉल नहीं किया जाता है, भले ही इसे @ टिप्पणी से पहले रखा गया हो। इसके अलावा, मैंने देखा है कि अगर वे 'टेस्ट' नाम से शुरू नहीं होते हैं, तो मेरी टेस्ट विधियों को निष्पादित/मान्यता प्राप्त नहीं किया जाता है, जो मामला नहीं है, हालांकि मैंने देखा कि सभी वसंत-एमवीसी-टेस्ट नमूने के साथ।
pom.xml:
<dependency>
<groupId>org.junit</groupId>
<artifactId>com.springsource.org.junit</artifactId>
<version>4.10.0</version>
<scope>test</scope>
</dependency>
अद्यतन:
समस्या केवल तब होता है जब मैं Maven से परीक्षण चलाने; यह ठीक है जब मैं अपने आईडीई (इंटेलिजे आईडीईए) के भीतर से परीक्षण चलाता हूं।
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.3</version>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>
अगर आप एक explicite नामित विन्यास फाइल '@ContextConfiguration (" classpath साथ एनोटेशन शैली का उपयोग क्या: कॉम/कंपनी/वेब/API/ApiTests -context.xml ")' – Ralph
कृपया पूर्ण संदर्भ पोस्ट करें। अपने पोम को भी पोस्ट करें क्योंकि ऐसा लगता है जैसे आप जूनिट 3 का उपयोग कर रहे हैं? – MikePatel
@ राल्फ ने इसे पहले से ही कोशिश की, कोई फर्क नहीं पड़ता। @Context कॉन्फ़िगरेशन (स्थान = {"कक्षापाथ: कंपनी/कॉम/वेब/एपीआई/एपीटीस्ट्स-संदर्भ.एक्सएमएल"}) –