单元测试使用Assembly的方法

wai*_*rit 4 c# unit-testing .net-core

我需要对xUnit使用的方法进行单元测试Assembly,特别是使用参数调用Assembly.GetEntryAssembly().

但不幸的是,在单元测试项目中,入口组件似乎testhost不是我的测试项目.这样我就无法搜索我的测试项目.那是否意味着我无法测试这种方法?还是另一种方式?

tra*_*max 5

并非所有代码都应该进行测试.将您使用的代码解压缩Assembly.GetEntryAssembly()到一个单独的组件中,如下所示:

public interface IAssemblyProvider
{
      Assembly GetEntryAssembly();
}

public class AssemlbyProvider : IAssemblyProvider
{
      public Assembly GetEntryAssembly()
      {
           return Assembly.GetEntryAssembly();
      }
}
Run Code Online (Sandbox Code Playgroud)

并在代码中使用此抽象.无需测试这种方法 - 我们知道它有效,这是.Net框架的一部分.然后您要测试的代码应该使用IAssemblyProvider,因此您可以使用存根替换它:

// should only be visible in test project
internal class StubAssemlbyProvider : IAssemblyProvider
{
      public Assembly GetEntryAssembly()
      {
           return typeof(MyClassInEntryAssembly).Assembly;
      }
}
Run Code Online (Sandbox Code Playgroud)

这样您的代码就会被测试,但您不会测试.Net框架代码.