我需要xUnit
测试使用Assembly
的方法,特别是使用参数Assembly.GetEntryAssembly()
调用。
但不幸的是,在单元测试项目中,入口程序集似乎是testhost
而不是我的测试项目。这样我就无法搜索我的测试项目。这是否意味着我无法测试这种方法?还是另一种方式?
答案 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框架代码。