gpt4 book ai didi

java - 测试 spring-boot @service 类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:18 28 4
gpt4 key购买 nike

我想测试一个通常用 SpringApplication.run() 调用的 @Service 类。

服务类是:

@Service
@EnableConfigurationProperties(AppProperties.class)
public class MongoService {

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

private MongoClient mongoClient;

private final AppProperties properties;

@Autowired
public MongoService(AppProperties properties) {
this.properties = properties;
}

/**
* Open connection
*/
public void openConnection() {

try {
mongoClient = new MongoClient(new MongoClientURI(properties.getMongoConnectionString()));
} catch (Exception e) {
logger.error("Cannot create connection to Search&Browse database", e);
throw new BackendException("Cannot create connection to Search&Browse database");
}
}

}

当它被以 SpringApplication.run() 启动的 Controller 调用时,MongoService 不为空,但是当我从 jUnit 尝试时它不工作。

所以,我正在尝试:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = AppProperties.class)
public class MongoServiceTest {

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

@Autowired
MongoService mongoService;

@Test
public void MongoServiceAutowired() {
assertNotNull(mongoService);
}
}

但我遇到了这个异常:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mypackage.MongoServiceTest': Unsatisfied dependency expressed through field 'mongoService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'mypackage.services.mongo.MongoService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

有什么线索吗?我哪里失败了?

最佳答案

我假设你的 AppPropertiesMongoService 不在同一个包中

如果没有,你可以用这种方式注入(inject) MongoService :

创建另一个名为 TestConfiguration 的类

@ComponentScan(basePackageClasses = {
MongoService.class,
AppProperties.class
})
@SpringBootApplication
public class TestConfiguration {
public static void main(String[] args) {
SpringApplication.run(TestConfiguration.class, args);
}
}

在测试中只需更改为:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class)
public class MongoServiceTest {

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

@Autowired
MongoService mongoService;

@Test
public void MongoServiceAutowired() {
assertNotNull(mongoService);
}
}

关于java - 测试 spring-boot @service 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com