1

SpringJunitテスト構成のテスト中にNullPointerExceptionが発生します。問題は、@ContextConfigurationと@Autowiredアノテーションの使用にあります。

testメソッドのコメントアウトされたコードで示されているように、コンテキストをインスタンス化してBeanへの参照を直接取得すると、テストは正しく実行され、成功します。しかし、同じXMLファイル属性で@ContextConfigurationアノテーションと@autowiredアノテーションを使用しようとすると、assertEqualsステートメントでNullPointerExceptionが発生します。私が何を間違っているのか分かりますか?

package com.greathouse.helloworld.HelloWorldTest;

import javax.inject.Inject;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import junit.framework.TestCase;

@ContextConfiguration(locations = {"classpath:/resources/application-config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest extends TestCase
{
    @Autowired
    MessageService messageService;

    @Test
    public void testApp()
    {
        //ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/resources/application-config.xml");
        //messageService = context.getBean("printMessage", MessageService.class);
        assertEquals( messageService.getMessage(), "Hello World" );
    }
}
4

2 に答える 2

7

messageServiceが自動配線されなかったようです。必要に応じてmessageServiceを配置すると便利です。

@Autowired( required = true )

このように、Springコンテキストが開始すると、Springがコンポーネントを自動配線しなかった理由がわかります。また、補足として、JUnit 4を使用しているため、テストをTestCaseから拡張する必要はありません。

于 2012-11-09T14:50:58.943 に答える
0

フィールドmessageServiceが初期化されていません-context.getBean-lineのコメントを再度解除する必要があります。

于 2012-11-09T05:46:34.337 に答える