在.NET Core中,在简单的.NET Core API中执行Assembly.GetEntryAssembly
与使用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();
}
在简单的.NET Core API中调用Assembly.GetEntryAssembly
时,它将返回API程序集。
如上所述,在测试中调用Assembly.GetEntryAssembly
时,它将返回测试包。
我不确定这是否是设计使然,但我需要一种使它们返回相同内容的方法:API程序集。我正在使用Assembly.GetEntryAssembly
遍历API中的所有控制器。我无法通过参数传递程序集。也欢迎其他选择。
答案 0 :(得分:0)
您正在描述的行为正是Assembly.GetEntryAssembly()
应该做的事情:请参见Assembly.GetEntryAssembly Method。
改为使用Assembly.GetExecutingAssembly()
:请参见Assembly.GetExecutingAssembly Method。
或者,您可以通过该 Assembly 中包含的 Type 获得API Assembly :
typeof(MyNamespace.MyClass).Assembly
我认为Type.Assembly
是更具表现力的解决方案:请参见Type.Assembly Property。