环境: VS2017,针对 .NET Core 2.1 的 C# 7.0。我正在尝试编写一个用于单元测试的假/模拟类,并且我在访问DisplayClass对象上的属性时遇到了困难,我知道这是来自匿名函数的闭包类。我的代码如下所示:namespace MyCompany.Application.Web.Test.Fakes{ public class FakeElasticClient : IElasticClient { public FakeElasticClient() { } public Task<ISearchResponse<T>> SearchAsync<T>(Func<SearchDescriptor<T>, ISearchRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) where T : class { var methodName = selector.Method.Name; dynamic tgt = selector.Target; object id = tgt?.GetType().GetProperty("id")?.GetValue(tgt, null); int? total; if (methodName.Contains("Quux")) { total = CountSomething((Guid)id); } else { total = CountSomethingElse((Guid)id); } return Task.Run(() => new FakeSearchResponse<T>(total ?? 0) as ISearchResponse<T>); } // … below here follows a couple thousand other methods即使 Visual Studio 调试器显示该对象具有一个属性,强制转换id为也会Guid抛出一个:NullReferenceExceptiontgtid注释:我从这个答案object id = …中偷了线。tgt.GetType()返回MyCompany.Application.Domain.Repository.Implementations.BusinessEntityRepository.<>c__DisplayClass8_0tgt.GetType().GetProperties()返回一个空PropertyInfo数组。受这篇博文的启发,我为 the和class添加了一个[assembly: InternalsVisibleTo("MyCompany.Application.Web.Test")]属性,据我所知,这是调用链中唯一涉及的两个类。没有任何区别。MyCompany.Application.Domain.Repository.Implementations.BusinessEntityRepositoryMyCompany.Application.Web.Controllers我尝试IgnoresAccessChecksTo 按照此处描述的方法进行操作,但无法编译任何内容。如何检索 的值id?
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消