单元测试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,虽然我认为这是无关紧要的。

+2

似乎正确。它可能与“xxx.xxx.xxxTests”与实际测试项目全名之间的不匹配一样明显。或者,也许你需要重建你正在测试的项目。据我所知,你不需要指定你的项目的完整路径。 – evilkos

+0

你使用Moq或其他NuGet包来做你的'mockApplicationBuilder'吗?如果是这样,你还需要将内部信息暴露给该程序集。 – Micteu

没有得到闲逛在你的解决方案,我只能提供建议

  • 验证您的ASP项目在您的测试项目,这是应该还是你就会有其他的问题,也是最容易被引用项目参考
  • 验证测试项目集名称和InternalsVisibleTo包含完全限定的程序集名称
  • 验证HttpExceptionMiddleware实际上是标记为内部
  • 清洁和检查干净,然后重建你的解决方案

一个可能的答案是AssemblyInfo.cs文件正在自动生成(所以覆盖或忽略你的)。非常猜测。另请参阅:

Equivalent to AssemblyInfo in dotnet core/csproj