我已经将Fabric8应用于访问OpenShift中的CustomResource,下面是一个工作的示例代码。
现在我正在写Junit测试,我被嘲笑困住了,有一些东西需要去模仿
有人能给出一些示例代码或指出如何实现吗?我很感激你的进阶。
try (KubernetesClient k8sClient = new DefaultKubernetesClient()) {
MixedOperation<
CertificateRequest,
KubernetesResourceList<CertificateRequest>,
Resource<CertificateRequest>>
certClient = k8sClient.resources(CertificateRequest.class);
CertificateRequest certificateRequest =
certClient.inNamespace(certNamespce).withName(certRequestName).get();
if (certificateRequest == null) {
logger.info(
"CertificateRequest {} in certNamespce {} is a new one.",
certRequestName,
certNamespce);
} else {
certClient.inNamespace(certNamespce).withName(certRequestName).delete();
logger.info(
"Delete existing CertificateRequest {} in certNamespce {}, then create a new one.",
certRequestName,
certNamespce);
}
} catch (Exception exception) {
logger.error("Hit an error when create a CertificateRequest: ", exception);
}发布于 2021-11-25 12:13:09
如果您的当前逻辑封装在如下方法中:
public void delete(String certNamespace, String certRequestName) {
// Your logic
}以及定义如下的CertificateRequest类:
@Group("our-certificates.custom.example.com")
@Version("v1")
@Plural("certificaterequests")
public static final class CertificateRequest
extends CustomResource<CertificateRequestSpec, CertificateRequestStatus> {
}您可以使用KubernetesMock服务器执行两个单元测试:
第一个验证只执行GET请求以检查资源是否存在:
@Test
void testDeleteWhenNotExistsShouldDoNothing() throws Exception {
new CertificateRequestExample(kubernetesClient).delete("my-namespace", "my-cert");
assertThat(mockServer.getLastRequest())
.hasFieldOrPropertyWithValue("path", "/apis/our-certificates.custom.example.com/v1/certificaterequests/my-cert")
.hasFieldOrPropertyWithValue("method", "GET");
}第二个验证是否执行了删除请求。为此,在检查资源是否存在时,我们首先设置返回200的期望。
@Test
void testDeleteWhenExistsShouldDelete() throws Exception {
mockServer.expect().get().withPath("/apis/our-certificates.custom.example.com/v1/certificaterequests/my-cert")
.andReturn(200, "{}").once();
new CertificateRequestExample(kubernetesClient).delete("my-namespace", "my-cert");
assertThat(mockServer.getLastRequest())
.hasFieldOrPropertyWithValue("path", "/apis/our-certificates.custom.example.com/v1/certificaterequests/my-cert")
.hasFieldOrPropertyWithValue("method", "DELETE");
}这只是使用MockServer为该行为提供覆盖率的方法之一。
此外,我建议可能重构一点点您的逻辑,以便能够更好地测试。现在,您只依赖于日志来提供有关方法操作结果的反馈。在测试中,我们断言了最后一个请求,这很好,因为我知道该方法是如何实现的(白盒),所以我确定在这两种情况下最后一个请求是什么。
您可以在GitHub上检查此示例的完整源代码。
https://stackoverflow.com/questions/69810796
复制相似问题