2017-11-20 30 views
0

コンセプトを理解するために@DataJpaTestを使用せずに統合テストを生成しようとしています。 私はReflectionで、テスト中のサービスレイヤ内でThe Daoを取得または設定できないことに気付きました。だから、DaoがReflection APIを持ってアクセスしたとき、それはNullPointerExceptionを返します。私は、Java Reflection APIとSpring FrameworkのReflectionTestUtilsの両方をテストしました。ここでSpring autowiredパラメータでリフレクションが動作しない

UserService userService; 

@Before 
public void setUp(){ 
    userService = new UserServiceImpl(); 
    UserDao userDao = (UserDao) ReflectionTestUtils.getField(userService, "userDao"); 
    userDao.deleteAll(); //HERE RETURNS A NULLPOINTER 
    ... 
} 

がUserServiceImpl.javaに私は、Springフレームワークの@Autowired注釈を使用してJpaRepositoryを拡張UserDao(インタフェースを注入することを検討するコードの抜粋です。私はダオは(春のフレームワークによって実装にアクセスするにはどうすればよい

)私のサービスからの感謝

+0

完全なスタックトレースを配置できますか。他の内部呼び出しでNullPointerをスローしていますか? – pvpkiran

+0

RestController内のuserDao属性がnullなので、Reflectionで取得しようとするとnullオブジェクトが返されます。私は統合テストから@Autowired UserDaoインターフェースにアクセスする方法を知らない。 –

+0

あなたは手動で 'UserServiceImpl'を作成しています。あなたはそれをオートワイヤーして、春にオブジェクトを作成させるべきです。それから、すべての依存関係が設定されます。 –

答えて

1

一つの便利なトリックは、実際にautowiredなっているあなたのautowired依存関係を検証することにより、あなたのテストのSpring構成が正しく動作していることを確認することです。たとえば:?!。

@Autowired 
UserDao userDao; 

@Autowired 
UserServiceImpl userService; 

@Test 
public void verifySpringContext() { 
    assertNotNull(userDao); 
    assertNotNull(userService.getUserDao()); 
} 

あなたのテストでSpringの設定に問題があると思われ、userDaoがautowiredにならないようにします。

+0

Infact @RunWith(SpringRunner.class)を挿入するのを忘れていました。また、Springにそれを挿入させる代わりに、UserServiceImplのコンストラクタを使用しました。それが解決策に私をもたらしたので、正解です!ありがとう! –

関連する問題