Spring 无法在Junit测试中注入依赖项
在我的一个JUnit测试类中注入依赖项时遇到了一些问题。 我相信测试应用程序不是包扫描或未加载 代码如下:Spring 无法在Junit测试中注入依赖项,spring,junit,dependency-injection,Spring,Junit,Dependency Injection,在我的一个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 or
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 );
}
package com.mitto.repositories;
导入org.springframework.data.repository.paging和sortingrepository;
导入org.springframework.stereotype.Repository;
导入com.mitto.domain.User;
@存储库
公共接口用户存储库扩展了分页和排序存储库{
用户findByFacebookId(长facebookId);
用户findByAuthToken(字符串令牌);
}
我看不出这有什么问题 有时候,一个有效的示例比修复更好。
以下是一个工作示例: 首先,在您的配置类中
@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
}
Spring引导应用程序只是一个Spring应用程序上下文,因此除了通常使用普通Spring上下文进行测试外,不需要做任何特殊的测试。但是需要注意的一点是,如果使用SpringApplication创建SpringBoot,那么SpringBoot的外部属性、日志记录和其他功能默认情况下只能安装在上下文中
SpringBoot提供了@SpringBootTest注释,当您需要SpringBoot功能时,可以将其用作标准SpringTest@ContextConfiguration注释的替代品。注释的工作原理是通过SpringApplication创建测试中使用的ApplicationContext
有关更多详细信息,请阅读文档:
有时候,一个有效的例子比修复更好。
以下是一个工作示例: 首先,在您的配置类中
@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
}
Spring引导应用程序只是一个Spring应用程序上下文,因此除了通常使用普通Spring上下文进行测试外,不需要做任何特殊的测试。但是需要注意的一点是,如果使用SpringApplication创建SpringBoot,那么SpringBoot的外部属性、日志记录和其他功能默认情况下只能安装在上下文中
SpringBoot提供了@SpringBootTest注释,当您需要SpringBoot功能时,可以将其用作标准SpringTest@ContextConfiguration注释的替代品。注释的工作原理是通过SpringApplication创建测试中使用的ApplicationContext
有关更多详细信息,请阅读文档:
谢谢闵军,这帮助我解决了问题,让我更好地理解。干杯@scottazord
@SpringBootTest
的值为class,指定用于加载ApplicationContext的类。它没有做更多的事情。很高兴它有帮助。谢谢Minjun,这帮助我解决了我的问题,并为我提供了更好的理解。干杯@scottazord@SpringBootTest
的值为class,指定用于加载ApplicationContext的类。除此之外,它没什么作用。很高兴它起到了作用。