单元测试ASP.NET Core中的内部类
问题描述:
我想在ASP.NET Core项目中使用internal
保护级别对类进行单元测试。单元测试ASP.NET Core中的内部类
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("xxx.xxx.xxxTests")]
然而,当我把这个在我的测试:我已经在测试增加了一个AssemblyInfo.cs文件到该项目的属性
mockApplicationBuilder.Verify(y => y.UseMiddleware<HttpExceptionMiddleware>());
我仍然得到
HttpExceptionMiddleware由于其保护级别而无法访问
为什么我的Assem blyInfo属性不起作用?
我的设置是我有一个包含2个文件夹(src和tests)的解决方案,这些文件夹分别在文件夹的根目录下有src项目和测试项目。 AssemblyInfo.cs文件位于我的src项目的属性中。我是否需要在我的assemblyInfo.cs属性中指定测试项目的完整路径?
我的测试项目中还有一个AssemblyInfo.cs
,虽然我认为这是无关紧要的。
答
没有得到闲逛在你的解决方案,我只能提供建议
- 验证您的ASP项目在您的测试项目,这是应该还是你就会有其他的问题,也是最容易被引用项目参考
- 验证测试项目集名称和InternalsVisibleTo包含完全限定的程序集名称
- 验证HttpExceptionMiddleware实际上是标记为内部
- 清洁和检查干净,然后重建你的解决方案
答
一个可能的答案是AssemblyInfo.cs文件正在自动生成(所以覆盖或忽略你的)。非常猜测。另请参阅:
似乎正确。它可能与“xxx.xxx.xxxTests”与实际测试项目全名之间的不匹配一样明显。或者,也许你需要重建你正在测试的项目。据我所知,你不需要指定你的项目的完整路径。 – evilkos
你使用Moq或其他NuGet包来做你的'mockApplicationBuilder'吗?如果是这样,你还需要将内部信息暴露给该程序集。 – Micteu