【发布时间】:2017-04-05 22:33:55
【问题描述】:
我需要xUnit测试一个使用Assembly的方法,专门用参数Assembly.GetEntryAssembly()调用。
但不幸的是,在单元测试项目中,入口程序集似乎是testhost 而不是我的测试项目。这样我将无法搜索我的测试项目。这是否意味着我将无法测试此方法?还是另一种方式?
【问题讨论】:
标签: c# unit-testing .net-core
我需要xUnit测试一个使用Assembly的方法,专门用参数Assembly.GetEntryAssembly()调用。
但不幸的是,在单元测试项目中,入口程序集似乎是testhost 而不是我的测试项目。这样我将无法搜索我的测试项目。这是否意味着我将无法测试此方法?还是另一种方式?
【问题讨论】:
标签: c# unit-testing .net-core
并非所有代码都应进行测试。将您使用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 框架代码。
【讨论】:
Assembly。
MyClassInEntryAssembly 替换为您在主项目中拥有的类的名称
using System;吗?见小提琴:dotnetfiddle.net/aYZLsR