在.NET核心中,在简单的.NET核心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();
}当在一个简单的API中调用Assembly.GetEntryAssembly时,它返回.NET程序集。当在上面编写的测试中调用Assembly.GetEntryAssembly时,它会返回测试包。
我不确定这是否是故意的,但我需要一种方法让它们返回相同的东西: API程序集。我使用Assembly.GetEntryAssembly来迭代API中的所有控制器。我不能通过参数传递程序集。替代方案也是受欢迎的。
发布于 2018-10-08 19:39:48
您所描述的行为正是Assembly.GetEntryAssembly()应该做的:参见Assembly.GetEntryAssembly Method。
改为使用Assembly.GetExecutingAssembly():请参阅Assembly.GetExecutingAssembly Method。
或者,您可以通过包含在该程序集中的类型获取您的API程序集
typeof(MyNamespace.MyClass).Assembly在我看来,参见Type.Assembly Property,Type.Assembly是更具表现力的解决方案。
https://stackoverflow.com/questions/52700079
复制相似问题