0

I am trying to write a simple Junit test case to test service/dao layer of my project. But I get compilation error when I build it using Maven. Kindly help me with this.

Code:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"/C:/project/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml"})
public class AServiceTest { 

    @Autowired
    private AService aService;

    @Test
    public void testValidate() throws Exception {

        String user = "user10";
        String pass = "pass10";
        String flag = "failure";

        User response = aService.validate(user, pass);

        if (user.equalsIgnoreCase(response.getUser()) &&  pass.equals(response.getPass())) {
            flag="success";

            assertEquals("success", flag);
        }
    }
}

Error:

package org.springframework.test.context does not exist

Update:

The dependency for spring-test was missing my pom.xml, I added the same and the above error is gone but I get a new error now.

Error:

SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@3b5587] to prepare 

test instance [com.sample.project.controller.AServiceTest@16c1857]
java.lang.IllegalStateException: Failed to load ApplicationContext
        at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:220)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [C:/project/src/main/webapp/WEB-

INF/mvc-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: class path resource [C:/project/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml]
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:81)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
        at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
        at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
        ... 30 more
Caused by: java.io.FileNotFoundException: class path resource [C:/project/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
        ... 39 more

Context file:

xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:component-scan base-package="com.sample.project" />

<mvc:annotation-driven />

<jee:jndi-lookup id="sampleDS" jndi-name="java:/comp/env/jdbc/sampleDS" expected-type="javax.sql.DataSource"/>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="sampleDS"/>
</bean>

<bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="myTxManager" />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp" />
</bean>

guerda
  • 23,388
  • 27
  • 97
  • 146
Jazz
  • 35
  • 6
  • 1
    Can you show you pom.xml? –  Mar 01 '13 at 00:52
  • Kata, you are right. The dependency spring-test was missing. I added that in the pom.xml and the above error is gone but I get a new error now. Can you please help with it. SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14943d6] to prepare test instance – Jazz Mar 01 '13 at 01:08
  • One simple improvement for better unit tests: the rows if (user.equalsIgnoreCase(response.getUser()) && pass.equals(response.getPass())) { flag="success"; assertEquals("success", flag); } are really ugly to read. Why don't you use assertTrue(user.equalsIgnoreCase(response.getUser()) && pass.equals(response.getPass())); ? – guerda Mar 04 '13 at 08:28
  • Thanks a lot for the tip, I'll definitely use the one you mentioned. – Jazz Mar 04 '13 at 20:46

1 Answers1

0

Without having access to your configuration and how things are set up on your environment, it is really hard to help.

From the exception, it would seem that you have not correctly configured the application context files for the spring framework. The error message is quite explicit:

Caused by: java.io.FileNotFoundException: class path resource [C:/project/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml] cannot be opened because it does not exist

I am not sure what your experience with spring is but I would read up on that. Useful links below:

For the tests:

  • Thanks Kata. I added my context file to the original post, am I missing an entry ? – Jazz Mar 01 '13 at 16:26
  • where is the context file? –  Mar 01 '13 at 16:27
  • I'm sorry I just added it. – Jazz Mar 01 '13 at 16:30
  • @Jazz Look at this question: http://stackoverflow.com/questions/4377699/spring-contextconfiguration-how-to-put-the-right-location-for-the-xml –  Mar 01 '13 at 16:38
  • I'll put the context files in test/resources and try. Will let you know, thanks again. – Jazz Mar 01 '13 at 16:44
  • No Kata, I placed my .xml files in src/test/resources but I get the same error. I think I'm missing some settings in my context file. Can't I use the existing files as is, are there any changes to be made for tests ? – Jazz Mar 04 '13 at 20:50