VSTest中的GetEntryAssembly

时间:2018-10-08 10:16:39

标签: c# .net-core

在.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中的所有控制器。我无法通过参数传递程序集。也欢迎其他选择。

1 个答案:

答案 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