java - 测试时无法从 yml 文件中读取值
问题描述
这是我的主类,当我创建一个模拟类来测试 start() 函数时,我在 ClientSecretBasic 行出现错误,它说“值不能为空或空字符串”,当我将值更改为常量时,它有效,这意味着我没有从 yml 文件中获取值,如何解决这个问题?
@Component
public class GrpcAuthorizationInterceptor
@Value("${configuration.clientId}")
private String clientId;
@Value("${configuration.clientSecret}")
private String clientSecret;
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, final Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<>(next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
ClientSecretBasic clientSecretBasic = new ClientSecretBasic(new ClientID(clientId), new Secret(clientSecret)); //java.lang.IllegalArgumentException: The value must not be null or empty string
***
}
};
}
}
这是我的 yml 文件。
configuration:
clientId: "1234"
clientSecret: "1234"
这就是我测试它的方式
Metadata headers = new Metadata();
ClientCall.Listener listener = mock(ClientCall.Listener.class);
clientCall.start(listener, headers);
解决方案
可以像下面这样注入 Spring 值
@RunWith(MockitoJUnitRunner.class)
public class SomeTest {
ClientInterceptor interceptor = (ClientInterceptor) new GrpcAuthorizationInterceptor();
@Before
public void setup() {
// inject spring property values
ReflectionTestUtils.setField(interceptor, "clientId", "some-value");
ReflectionTestUtils.setField(interceptor, "clientSecret", "some-value");
}
.....
-- test methods
}
推荐阅读
- reactjs - 无法验证来自 Firebase 身份验证的电子邮件和密码数据
- python - 在 Google Apps 脚本中,我无法从所需的工作表中提取数据
- java - 如果还有其他有效的八位位组,我不确定如何列出无效的八位位组
- python - 如何刮取 NBA 首发阵容并创建 Pandas DataFrame?
- c# - “ValidateExecutableReferences”任务意外失败
- typescript - 对条件类型参数的混淆;为什么不编译?
- node.js - MongoDB:findOne 没有按预期工作?
- python - 由于 ModuleNotFoundError,pytest 在 AWS SAM 项目中失败
- python - 根据多个条件过滤像素
- javascript - 在firebase 9中访问文档中的集合