c# - VSTest 中的 GetEntryAssembly
问题描述
Assembly.GetEntryAssembly
在 .NET Core中,在简单的 .NET Core API 中执行和在使用 VSTest 运行测试时执行它是有区别的。
这些是我的包裹:
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
以下是我为 API URL 运行测试的方式:
[TestMethod]
public async Task SomeTest()
{
var builder = new WebHostBuilder().UseStartup<Startup>();
var testServer = new TestServer(builder);
var client = testServer.CreateClient();
var response = await client.GetAsync("someUrl");
var content = await response.Content.ReadAsStringAsync();
}
在Assembly.GetEntryAssembly
简单的 .NET Core API 中调用时,它会返回 API 程序集。当Assembly.GetEntryAssembly
在上面编写的测试中调用时,它会返回测试包。
我不确定这是否是设计使然,但我需要一种方法让它们返回相同的东西:API 程序集。我Assembly.GetEntryAssembly
用来迭代 API 中的所有控制器。我无法通过参数传递程序集。也欢迎替代品。
解决方案
您所描述的行为正是Assembly.GetEntryAssembly()
应该做的:参见Assembly.GetEntryAssembly Method。
改用Assembly.GetExecutingAssembly()
:参见Assembly.GetExecutingAssembly Method。
或者,您可以通过包含在该Assembly中的Type获取您的 API Assembly:
typeof(MyNamespace.MyClass).Assembly
在我看来,Type.Assembly
更具表现力的解决方案是:参见Type.Assembly Property。
推荐阅读
- reactjs - 选择时更改日期的标题格式
- db2 - 如何从 DB2 表中删除 8000 万行,其中 Where 子句将具有连接查询?
- c++ - Alpine Image standard_init_linux.go:207: exec 用户进程导致“没有这样的文件或目录”
- python-3.x - 最低有效“0”位数会影响 Pandas 中的值
- git - 查找哪个 git commit 删除了“目录”(不是文件)?
- sql - sql查询查找尼泊尔日期的MTD和YTD,其中日期在数据库级别的AD中
- java - 我在定义构造函数类时遇到问题
- javascript - 为什么我不能使用我的 URL 参数设置选择选项的值?
- json - 如何从 Roku Scenegraph (brightscript) 中的多个 JSON 文件中解析?
- symfony - 使用 Doctrine 生成迁移时如何禁用 FOREIGN KEY CONSTRAINT?