2016-10-03 9 views
0

私のJUnitテストクラスの1つに依存関係を注入するのに問題があります。 私は、TestApplicationがパッケージスキャンでないか、読み込まれていないと考えています。Junitテストに依存関係を注入できません

以下のコード:

package com.mitto.repositories; 

import static org.junit.Assert.*; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.TestExecutionListeners; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; 
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; 

import com.github.springtestdbunit.DbUnitTestExecutionListener; 
import com.github.springtestdbunit.annotation.DatabaseSetup; 
import com.mitto.MittoApplicationTests; 
import com.mitto.domain.User; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes= { MittoApplicationTests.class }) 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, 
    TransactionalTestExecutionListener.class, 
    DbUnitTestExecutionListener.class}) 
@DatabaseSetup("UserRepositoryTest.xml") 
public class UserRepositoryTest { 

    @Autowired 
    UserRepository repository; 

    private static final long FACEBOOK_ID = 1234567; 

    @Test 
    public void getUserById() { 
     User user = repository.findOne(1L); 
     assertNotNull(user); 
     assertEquals(user.getFacebookId(), FACEBOOK_ID ); 
    } 
} 

MittoApplicationTests.java

package com.mitto; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class MittoApplicationTests { 

    @Test 
    public void contextLoads() { 
    }  
} 

UserRepository.java

package com.mitto.repositories; 

import org.springframework.data.repository.PagingAndSortingRepository; 
import org.springframework.stereotype.Repository; 

import com.mitto.domain.User; 

@Repository 
public interface UserRepository extends PagingAndSortingRepository<User, Long>{ 

    User findByFacebookId(long facebookId); 
    User findByAuthToken(String token); 

} 

私はこれに何かを見ることはできません。

答えて

2

場合によっては、修正例よりも良い例があります。ここ
は実施例である:

まず、お使いのコンフィギュレーションクラスの

@SpringBootApplication 
@ComponentScan(value = "com.mitto") 
@EnableJpaRepositories(value = "com.mitto") 
@EntityScan(basePackages = {"com.mitto.domain"}, basePackageClasses = {Jsr310JpaConverters.class}) 
public class MittoApplicationTests { 
} 

第二に、あなたのテストクラスで

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = MittoApplicationTests.class) // replace the @ContextConfiguration with @SpringBootTest 
// rest of of your annotations ... 
public class UserRepositoryTest { 
    @Autowired 
    UserRepository repository; 

    // your test cases 
} 

A春ブートアプリケーションは、ちょうど春のApplicationContextですバニラスプリングのコンテキストで通常行うことを超えて、それをテストするために非常に特別なことは何もしないでください。 Springの外部プロパティ、ロギング、その他の機能は、SpringApplicationを使用して作成する場合、デフォルトでコンテキストにのみインストールされます。

Spring Bootは、@ SpringBootTestアノテーションを提供しています。これは、SpringBoot機能が必要な場合に、標準のSpring-test @ContextConfigurationアノテーションの代替として使用できます。注釈は、SpringApplicationを介してテストで使用されるApplicationContextを作成することによって機能します。

詳細は、ドキュメントを読んでください:

SpringBootTest annotation

boot-features-testing

+0

おかげMinjun、これは私の問題を解決し、提供し、より良い私のために理解して助けました。乾杯! – scottazord

+0

@scottazord '@ SpringBootTest'クラスの値を指定すると、ApplicationContextのロードに使用するクラスを指定します。それ以上のことはありません。 –

+0

喜んで助けました。 –

関連する問題