2011-01-20 4 views
0

Я запускаю некоторые модульные тесты, используя Spring и Mockito. Я настроил издевается в springcontext.xml следующим образом:Весна Контекстная проблема во время работы unit test

<bean id="featureEndpoint" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.company.blah.blah.FeatureEndpoint" /> 
</bean> 

Мой тестовый класс построен следующим образом:

@ContextConfiguration(locations= {"/springcontext.xml"}) 
public class FeatureEndpointValidationTest extends JsonEndpointValidationTest { 

    private FeatureEndpoint featureEndpoint; 

    @BeforeClass 
    public void setUp() { 
     featureEndpoint = getBean("featureEndpoint"); 
     super.setEndpoint(featureEndpoint); 
    } 

    @Test 
    . 
    . 
    . 
} 

Когда я запускаю этот тест, getBean() бросает NPE, потому что контекст нулевой. ОДНАКО, если я переименую тестовый класс, чтобы сказать TestEndpoint (или что-либо, у которого нет строки «Feature», она работает отлично. Im смущает это поведение. Я искал все другие файлы конфигурации для любых конфликтов имен, но ни один из них они имеют какой-либо компонент, который содержит имя «функцию» Любые подсказки относительно того, почему это происходит

Вот след за исключением брошено:.?

java.lang.NullPointerException 
    at com.foo.bar.UnitTest.getBean(UnitTest.java:14) 
    at com.foo.bar.service.api.rest.FeatureEndpointValidationTest.setUp(FeatureEndpointValidationTest.java:30) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580) 
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:398) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:145) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:82) 
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:167) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104) 
    at org.testng.TestRunner.runWorkers(TestRunner.java:712) 
    at org.testng.TestRunner.privateRun(TestRunner.java:582) 
    at org.testng.TestRunner.run(TestRunner.java:477) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:324) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:198) 
    at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:788) 
    at org.testng.TestNG.run(TestNG.java:708) 
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:62) 
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:141) 
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) 
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) 

Благодаря

ответ

1

Вы используете спринт-тест, который хорош. Попробуйте настроить свой тест следующим образом:

Использование аннотации @Autowired с использованием класса Runner Spring JUnit, все переменные автоматически инициализируются соответствующим им компонентом одного и того же типа. Вы также можете использовать @Qualifier("featureEndpoint"), чтобы указать имя компонента.

Если вы просто хотите получить доступ к контексту, воспользуйтесь ApplicationContextAware, который содержит метод setApplicationContext.

Кроме того, если вы хотите проверить bean-компоненты, вы можете реализовать InitializingBean, который в контейнере с пружиной будет вызван после создания экземпляра и инициализации, где вы можете утверждать, является ли FeatureEndpoint не null.

Ключом к этому уравнению, однако, является использование класса бегунов SpringJUnit4ClassRunner.

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

  • Нет связанных вопросов^_^