C# 如何伪造Assembly.LoadFile和Assembly.GetTypes?

C# 如何伪造Assembly.LoadFile和Assembly.GetTypes?,c#,unit-testing,visual-studio-2013,microsoft-fakes,C#,Unit Testing,Visual Studio 2013,Microsoft Fakes,我正在努力伪造这两行代码: Assembly asm = Assembly.LoadFile(fileName); Type[] asmTypes = loggerAssembly.GetTypes(); 当我键入System.Reflection.shimsassembly时,没有像shimsassembly这样的类型,例如在System.IO.ShimFile的情况下,只有StubAssembly 我可以重构代码,并使用静态助手方法(如LoadAssemblyAndGetTypes)进行重

我正在努力伪造这两行代码:

Assembly asm = Assembly.LoadFile(fileName);
Type[] asmTypes = loggerAssembly.GetTypes();
当我键入
System.Reflection.shimsassembly
时,没有像
shimsassembly
这样的类型,例如在
System.IO.ShimFile
的情况下,只有
StubAssembly

我可以重构代码,并使用静态助手方法(如
LoadAssemblyAndGetTypes
)进行重构,但这似乎是一种不必要的解决方法。我更喜欢正式的解决方案

如果它只是这样工作的话:

var shimAsm = System.Reflection.Fakes.ShimAssembly.LoadFile = (fileName) => 
{ 
   return ???
}; 

var types = shimAsm.GetTypes = () => 
{ 
   return new Type[] { new object() };
};
为什么它适用于
System.IO.File
而不适用于
System.Reflection.Assembly
。这是因为
Assembly
是一个抽象类吗



在我的单元测试中,我想检查我的程序集加载器是否正确地检查加载的程序集是否包含实现某些接口的类型,以便我以后可以实例化它们。

我想我找到了答案,但看起来不太好:

@Patrick Tseng-Visual Studio团队-撰写于:

…我们确实有一份我们故意不允许他们这样做的清单 摆了摆。原因是它可能会导致复发 从CLR运行时本身调用迂回委托。例如,如果CLR 运行时在System.Reflection中使用类型,在运行时发生 在此类型中绕行函数。你最终可能会造成预期的后果 自运行时以来的行为将完全更改

简而言之,我们不填充值类型System.Reflection。, System.Runtime、、XamlGeneratedNamespace和其他一些类型 我们认为这一点很重要,不会对其进行补充

因此,毕竟我似乎需要保留静态助手方法