Jnuit 에서의 @Autowired 가 안되요 ㅠ

657 views
Skip to first unread message

이기민

unread,
Mar 25, 2011, 4:20:16 AM3/25/11
to ks...@googlegroups.com
안녕하세요. 얼마전에 KSUG에 가입한 이기민 입니다. 
가입인사도 쓴다 쓴다 하다가 이렇게 질문을 처음으로 인사드리게 되었네요 ㅠ 
서울에서 모바일쪽 개발을 하고 있습니다. 아이폰이랑 웹개발을 병행하고 있습니다. 
처음에 토비의 스프링을 구입하고 ksug를 가입하려했는데 사이트가 없어졌더라구요. 그래서 몰랐는데 
검색하다 보니까 여기 다들 계셨더라는;; 
앞으로 잘 부탁드립나다 (_ _) !! 


이번에 프로젝트 하면서 mongodb를 사용하기로 해서 찾아보다가 Morphia 라는 클래스를 디비에 매핑시켜주는 라이브러리를 찾았습니다. 
그래서 junit으로 테스트를해보려고 하는데 @Autowired 로 di시키려니 잘 되서요 ㅠ 
일단 코드는 


@ContextConfiguration(locations = { "classpath:spring/appServlet/servlet-content.xml" })
public class saveTest {

private static final Logger logger = LoggerFactory.getLogger(saveTest.class);


 

  @Autowired 
  private Mongo mongo;
  @Autowired 
  private Datastore datastore;
  @Autowired 
private Morphia morphia;

 

@Test
public void save(){

 

 

/*
try {
mongo = new Mongo("playdev.net",27017);
} catch (UnknownHostException e) {
  e.printStackTrace();
} catch (MongoException e) {
  e.printStackTrace();
}


morphia = new Morphia();



datastore = morphia.createDatastore(mongo, "디비이름", "유저", "패스워드".toCharArray());
*/


Account account = new Account("yunsunghan1","yunsu...@gmail.com1");

 

datastore.save(account);
List<Account>  accountList =  datastore.find(Account.class).asList();

 

logger.info(String.valueOf(accountList.size()));

 

 

}

}

이렇게 했는데 주석부분을 제거 하면 잘 돌아갑니다. 


servlet-content.xml 의 내용은 

    <beans:bean id="mongo" class="com.mongodb.Mongo">
  <beans:constructor-arg value="localhost" index="0"/>
  <beans:constructor-arg value="27017" index="1"/>
  </beans:bean>
  <beans:bean id="morphia" class="com.google.code.morphia.Morphia"/>
    <beans:bean id="datastore" factory-bean="morphia" factory-method="createDatastore"> 
        <beans:constructor-arg ref="mongo" index="0" /> 
        <beans:constructor-arg value="디비이름" index="1"/> 
        <beans:constructor-arg value="유저" index="2"/> 
        <beans:constructor-arg value="패스워드" index="3"/> 
    </beans:bean> 



요렇게 했는데 안되더라구요 ㅠㅠ 
주석을 제거하지 않으면 
java.lang.NullPointerException
at kr.co.plask.saveTest.save(saveTest.java:62)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

요런식으로 널포인트 익셉션이 일어납니다. 
saveTest.java:62 요부분은 

datastore.save(account); 여기구요. datastore 가 널이라서 생기는 버그같은데.. 

으음 제가 아직 개념이 많이 부족해서.. ㅠㅠ 토스도 읽는중이구요.
많은 가르침 부탁드립니다. 




Sungchul Park

unread,
Mar 25, 2011, 4:25:47 AM3/25/11
to ks...@googlegroups.com
혹시 @RunWith(SpringJUnit4ClassRunner.class)를 안 다신 건가요? 아니면 리스트에서 생략하고 올리신 건가요?

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

arawn

unread,
Mar 25, 2011, 4:28:48 AM3/25/11
to ks...@googlegroups.com
@RunWith(SpringJUnit4ClassRunner.class) 가 빠진거 같은데요?

11. 3. 25. 오후 5:20, 이기민 쓴 글:

이기민

unread,
Mar 25, 2011, 4:34:07 AM3/25/11
to ks...@googlegroups.com
아아 ㅠㅠ
아깐 넣었는데 안되서 빼서 하고 있었어요; 
다시 넣으니 ApplicationContext를 로드하지 못했다는 반가운 에러가!!
감사합니다 (_ _) 사실 이게 Junit 처음 써본거라 ㅠㅠ 


2011. 3. 25., 오후 5:25, Sungchul Park 작성:
Reply all
Reply to author
Forward
0 new messages