c# - 运行单元测试时出现 System.TypeAccessException
问题描述
我正在使用 xunit 编写一些单元测试,这些单元测试将测试HttpClient
我编写的子类,该子类也使用DelegateHandler
. 我正在尝试使用 aHttpMessageHandler
来模拟我通过在HttpClient
. 我通过HttpClientHandler.CreatePipeline()
调用将消息处理程序传递给我的删除处理程序的构造函数。但是,当我运行单元测试时,我得到了这个异常:
System.TypeAccessException : Attempt by security transparent method 'System.Net.Http.HttpClientFactory.CreatePipeline(System.Net.Http.HttpMessageHandler, System.Collections.Generic.IEnumerable`1<System.Net.Http.DelegatingHandler>)' to access security critical type 'System.Net.Http.HttpMessageHandler' failed.
Stack Trace:
at System.Net.Http.HttpClientFactory.CreatePipeline(HttpMessageHandler innerHandler, IEnumerable`1 handlers)
我的构造函数如下所示:
public MyHttpClient(HttpMessageHandler handler) :
base(HttpClientFactory.CreatePipeline(
new HttpClientHandler(),
new[]
{
new MyDelegateHandler(handler)
}))
{ }
我的委托处理程序的构造函数:
public MyDelegateHandler(HttpMessageHandler messageHandler) :
base(messageHandler)
{ }
还有我的单元测试中的一些代码:
var handler = new MyMessageHandler("response content");
MyHttpClient client = new MyHttpClient(handler);
var task = client.GetAsync("https://example.com");
(请注意,在我打电话之前发生异常GetAsync()
)
我已经尝试为我的所有调用添加安全属性,包括运行单元测试的方法(来自这个问题:Attempt by security transparent method X to access security critical method Y failed)
我还通过完全删除委托处理程序并将消息处理程序直接传递给MyHttpClient
构造函数进行了测试,并且效果很好。
我还尝试将以下属性的任意数量/组合添加到AssemblyInfo.cs
文件中:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
[assembly: AllowPartiallyTrustedCallers]
[assembly: SecurityTransparent()]
我还能做些什么来解决访问异常吗?我希望能够测试委托处理程序。
更新:无论我是否传入消息处理程序,我似乎都收到了这个异常。只需调用该CreatePipeline()
方法就会引发此异常。
解决方案
推荐阅读
- csv - HERE XYZ 无法通过命令行上传数据文件
- mysql - 如何索引和查询具有 60M 行和 50 列的非常大的数据库
- go - 完全删除使用“go get”安装的软件包?
- javascript - Lozad延迟加载插件,加载前图片显示链接断开
- java - java.lang.ClassCastException:java.math.BigDecimal 不能转换为 java.lang.Long
- botframework - 在虚拟助手模板中使用 Content Moderator 会引发错误
- java - 在 Java 8 中以静态方式获取类名
- javascript - 注释掉正则表达式,javascript
- java - 如何使用 Apache Olingo V2 实现分页?
- r - R比较/标志/天差/跳过相同的交易行