我的代码使用了一个第三方库,该库在其内部深处采用了单例模式。首次访问时,该库使用 Windows 环境变量来识别从中加载它的配置文件夹。
但是,我想在不同的单元测试集中针对不同的文件夹运行。理想情况下,我会为每个单元测试类或类似的东西指定配置文件夹。
第三方库是一个巨大的对象模型,我的代码只是在它们之上的一组扩展方法。我看不出模拟整个库的简单方法。
有什么方法可以为每个测试类创建一个新的 appdomain 吗?我知道负载测试具有在运行的测试程序集之间创建域的设置。就我而言,这将是很多程序集,我不太确定是否/如何在单元测试测试运行程序上设置此设置。
或者,我正在考虑购买 Typemock Isolator 或 JustMock,以便我可以使单例返回“null”,从而导致第 3 方库加载新库。我查看了反编译的代码,它似乎可以达到预期的结果。当然,那里可能隐藏着更多的“好东西”。
这些都是人为的方法。我真正想要的是在测试、测试类或测试程序集之间“刷新”完整的 appdomain。
当自动化测试需要切换配置文件夹时,我愿意牺牲速度。红绿重构周期可能不会包含多个配置文件夹。
关于如何实现这一目标的任何建议?
编辑 我刚刚发现不同的测试程序集会导致单例被擦除。因此,可以根据它们运行的配置来组织测试程序集,而不是根据测试所针对的依赖项或问题域来组织测试程序集。