java - 在 Testng 测试中使用来自 Spring Cloud 配置服务器的数据不起作用
问题描述
我有一个基于 Spring Boot 的服务器,它通过本地运行的 Spring Cloud 配置服务器访问其配置。配置服务器通过@ConfigurationProperties 提供数据库配置(数据库服务器、名称、用户等),如下面的“ServiceConfigProvider”所示。当应用程序服务器正常运行时,这可以正常工作。
当我使用 Testng 创建 @Test 时,不会注入数据库属性。事实上,没有记录配置服务器曾经被访问过。如何在我的@Test 中启用对配置服务器的访问?
主应用服务器:
@SpringBootApplication
@RefreshScope
public class ApplicationServer implements CommandLineRunner {
public static void main(String [] args) {
SpringApplication.run(ApplicationServer.class, args);
}
数据库属性类:
@Configuration
@ConfigurationProperties(prefix="db.product")
@Getter @Setter @ToString
public class DbProductServiceConfig {
private String dataBaseProductType;
private String dataBaseName;
private String userName;
private String userPassword;
private String hostName;
private String hostPort;
}
我的测试课:
import org.testng.annotations.Test;
@SpringBootTest( classes = ApplicationServer .class )
public class CreateKeysTest extends AbstractTest {
@Autowired
private KeyService keyService;
@Test
public void createKeysTest() {
keyService.allKeys();
}
}
public class AbstractTest extends AbstractTestNGSpringContextTests {
}
读取输入数据源的 DB 参数的类。这就是@Test 中发生故障的地方。userName 属性(和所有其他属性)为空。
@Component
public class ServiceConfigProvider {
@Autowired
private DbProductServiceConfig dbProductServiceConfig;
public PersistenceConfiguration persistenceConfiguration() {
String m = "persistenceConfiguration";
int d = 0;
Validate.notNull(dbProductServiceConfig, DbProductServiceConfig.class);
final String what = DbProductServiceConfig.class.getSimpleName();
log.debug(m, d, "Create %s from %s: %s",
PersistenceConfiguration.class.getSimpleName(), what, dbProductServiceConfig);
String userName = dbProductServiceConfig.getUserName();
String userPassword = dbProductServiceConfig.getUserPassword();
String hostName = dbProductServiceConfig.getHostName();
String hostPort = dbProductServiceConfig.getHostPort();
String dataBaseName = PersistenceConfigurationReaderWriter.filterValue( dbProductServiceConfig.getDataBaseName() );
String dbProductTypeStr = dbProductServiceConfig.getDataBaseProductType();
ProductType productType = PersistenceConfiguration.toProductType(dbProductTypeStr);
if (productType == null)
productType = ProductType.SQLSERVER;
Validate.notNull(userName, "UserName missing from " + what);
Validate.notNull(userPassword, "UserPassword missing from " + what);
Validate.notNull(dataBaseName, "DataBaseName missing from " + what);
PersistenceConfiguration pc = new PersistenceConfiguration();
pc.setDataBaseName(dataBaseName);
pc.setUserName(userName);
pc.setUserPassword(userPassword);
pc.setHostName(hostName);
pc.setHostPort(hostPort != null ? Integer.getInteger(hostPort) : null);
pc.setProductType(productType);
return pc;
}
}
解决方案
推荐阅读
- json - Ansible,从 JSON 响应中读取值时出错
- mysql - 当我尝试运行查询以查找 sesison 在一天内创建 30 天的总数时
- javascript - 如何通过 ajax 对 REST Web 服务进行身份验证
- ios - 号码检测中的 Swift IOS 自定义操作
- sql - 如何在 Postgres 中实现并行
- cosign-api - 使用 CoSign 签署位于 SharePoint 中的文档
- excel - VBA - 在字符串中查找名称的完全匹配
- ios - Xcode 10 - iOS 9.0 [12] 之前的安全区域布局指南错误
- visual-studio-2017 - NuGet 包管理器安装系统 dll
- apache-spark - Spark 结构化流检查点兼容性