Не запускать контекст весны в uni-test - PullRequest
1 голос
/ 08 мая 2011

У меня есть веб-приложение на Spring MVC и Maven. Когда я выполняю «mvn clean install», я получаю nullpointerexception из какого-то уни-теста. Это происходит потому, что один из ресурсов является нулевым, но почему?

Uni-тест:

package myapp.services.impl

....

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:META-INF/spring/applicationContext.xml"})
@TransactionConfiguration
public class MyServiceImplTest {

    @Resource
    private MyService myService;

    @Transactional
    @Test
    public void someTest() {
        SomeEntity entity = new SomeEntity();
        myService.createSomething(entity);  // THROW - NullPointerException, myService is NULL
        ...
    }
}

верный плагин в pom.xml:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
                <systemProperties>
                    <property>
                        <name>myapp.env</name>
                        <value>test</value>
                    </property>
                </systemProperties>
                <junitArtifactName>org.junit:com.springsource.org.junit</junitArtifactName>
            </configuration>
        </plugin>

И applicationContext.xml:

...
<context:component-scan base-package="myapp.services,myapp.services.impl"/>

<context:property-placeholder location="classpath*:META-INF/spring/common_${myapp.env}.properties"
                              system-properties-mode="OVERRIDE"
                              ignore-resource-not-found="true"/>
....

PS: когда я выполняю этот тест в Eclipse Run as JUnit Test - выполнить все без исключения

Трассировка стека после верного отчета:


Тестовый набор: myapp.services.impl.MyServiceImplTest

Выполнено тестов: 1, сбоев: 1, ошибок: 0, пропущено: 0, истекло время: 1.115 с <<< НЕИСПРАВНОСТЬ! myapp.services.impl.MyServiceImplTest.someTest () Истекшее время: 1,068 с <<< НЕИСПРАВНОСТЬ! java.lang.NullPointerException at myapp.services.impl.MyServiceImplTest.someTest (MyServiceImplTest.java:42) </p>

МАВЕНСКИЙ ВЫХОД:

...
[INFO] --- maven-surefire-plugin:2.4.3:test (default-test) @ mywebapp ---
[INFO] Surefire report directory: /home/xxx/Work/mywebapp/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running myapp.services.impl.MyServiceImplTest
log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
log4j:WARN No such property [maxBackupIndex] in     org.apache.log4j.DailyRollingFileAppender.
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.919 sec <<< FAILURE!


Results :

Failed tests: 
  myapp.services.impl.MyServiceImplTest.someTest()

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.465s
[INFO] Finished at: Mon May 09 00:05:06 MSD 2011
[INFO] Final Memory: 26M/70M
...

1 Ответ

0 голосов
/ 20 мая 2011

Просто мысль, но ...

Вы говорите, что поместили applicationContext.xml в папку test / resources - воссоздали ли вы структуру каталога, которую вы определили в этом каталоге?Т.е. test / resources / META-INF / spring / applicationcontext.xml?Если нет, то applicationcontext появится в test-classes / и не будет найден в соответствии с определенным вами местоположением classpath ... Если это просто в test / resources, измените аннотацию @ContextConfiguration на

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})`

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...