我有一个像这样的单元测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserTest {
@Autowired
UserRepository userRepository;
@Test
public void createTest() throws Exception {
//... blah blah blah这失败是因为我无法用@Autowired加载我的@Autowired
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext我没有像applicationContext.xml那样的this would suggest。
我的项目结构如下所示:
.
├── main
│ ├── java
│ │ └── com
│ │ └── foo
│ │ └── bar
│ │ ├── Main.java
│ │ ├── models
│ │ │ └── User.java
│ │ └── repositories
│ │ └── UserRepository.java
│ └── resources
│ ├── application.yaml
│ ├── public
│ └── templates
└── test
└── java
└── com
└── foo
└── bar
└── models
└── UserTest.java这个项目大量使用注释。在我的Main类中,我有这样的东西:
@SpringBootApplication
@PropertySources({
@PropertySource("classpath:application.yaml"),
})
@EnableJpaRepositories(basePackageClasses = {
UserRepository.class,
})
public class Main {
public static void main(final String[] args) throws Exception {
SpringApplication.run(App.class, args);
}
}我正在使用Gradle,并且我有以下测试依赖项:
testImplementation 'junit:junit:4.13'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'问题:
有谁能向我解释一下发生了什么事,对这种事情的可能原因和解决方案是什么?
发布于 2020-01-23 02:46:47
您必须指出将提供接口实现的组件。在您的情况下,您可以这样做:
@RunWith(SpringRunner.class)
@SpringBootTest(classes={Main.class})
public class UserTest {
....}或
在测试源中创建配置类,如下所示
@Configuration
@EnableJpaRepositories(basePackageClasses = {
UserRepository.class,
})
public class PersistenceConfiguration {
}很可能您也必须创建一个配置类,如下所示:
@Configuration
@@EntityScan(basePackage={"packages.where.you.put.your.entity.classes"})
public class EntityConfiguration {}之后,在测试中使用该类,如下所示:
@RunWith(SpringRunner.class)
@SpringBootTest(classes={PersistenceConfiguration.class, EntityConfiguraiton.class})
public class UserTest {
....}https://stackoverflow.com/questions/59814529
复制相似问题