gpt4 book ai didi

c# - 如何测试 HttpClient 是否包含客户端证书?

转载 作者:太空狗 更新时间:2023-10-29 23:45:30 27 4
gpt4 key购买 nike

我有一个经过身份验证的 HttpClient 生成器类的实现,类似于:

public class X509Authentication : IClientAuthenticator
{
protected readonly X509Certificate2 Certificate;

public X509Authentication(X509Certificate2 certificate)
{
if (certificate == null) throw new ArgumentNullException("certificate");
Certificate = certificate;
}

public HttpClient GenerateClient()
{
var clientHandler = new WebRequestHandler();
clientHandler.ClientCertificates.Add(Certificate);
var request = new HttpClient(clientHandler);
return request;
}
public void Dispose()
{
//nothing to do here.
}
}

...我如何测试 GenerateClient() 方法是否已成功将客户端证书附加到 HttpClient 类?

[TestMethod]
public void HttpClientCreationIncludesCertificate()
{
using (var auth = new X509Authentication(_certificate))
using (var client = auth.GenerateClient())
{
Assert...what? The certificate(s) are not visible here.
}
}

...还是我在尝试测试错误的东西?

最佳答案

9 个月大的问题,但无论如何 :)

我会做什么。您对界面的思考是正确的。现在你有了一个接口(interface),你可以模拟 GenerateClient 的“真实”实现,因为这个方法不做任何其他事情然后使用别人的代码(代码在第一个不是非常测试友好的地点)。

在这种情况下,我要测试的是应该调用 IClientAuthenticator.GenerateClient 的方法是否真的调用了它。一个例子 ->

[TestMethod]
Public void MyClass_MymethodthatcallsGenereateClient_DoesCallGenerateClient()
{
// Arrange
Mock<IClientAuthenticator> clientAuth = new Mock<IClientAuthenticator>();
MyClass myclass = new MyClass()

// Act
var result = MyClass.MymethodthatcallsGenereateClient();

// Assert (verify that we really added the client)
clientAuth.Verify(x => x.GenerateClient);
}

现在我们可以放心地知道客户端证书是在应该添加的时候添加的。希望这对您有所帮助!

关于c# - 如何测试 HttpClient 是否包含客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432940/

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