单元测试使用Assembly的方法

时间:2017-04-05 22:33:55

标签: c# unit-testing .net-core

我需要xUnit测试使用Assembly的方法,特别是使用参数Assembly.GetEntryAssembly()调用。

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

1 个答案:

答案 0 :(得分:5)

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

public interface IAssemblyProvider
{
      Assembly GetEntryAssembly();
}

public class AssemlbyProvider : IAssemblyProvider
{
      public Assembly GetEntryAssembly()
      {
           return Assembly.GetEntryAssembly();
      }
}

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

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

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