使用单独 AppDomain 的单元测试代码

我有使用AppDomain动态加载插件的代码。我有一个名为PluginFinder的私有内部类来完成这项工作。这一切都可以在生产环境中工作,但我现在正在尝试为它编写MS单元测试,并且我收到一个错误,说找不到程序集。


需要明确的是,主类创建 AppDomain 并在其中运行 PluginFinder 以加载使用正确的接口找到的类。加载类后,控件将返回到默认的 AppDomain。插件查找器仅在加载期间使用。


我使用下面的代码来创建环境:


            //  Create a domain to text for plugins

            AppDomain domain = AppDomain.CreateDomain("PluginLoader");


            //  Set PluginFinder to run in the new domain (assemblyName, typeName)

            (PluginFinder)domain.CreateInstanceAndUnwrap(

                typeof(PluginFinder).Assembly.FullName, typeof(PluginFinder).FullName);

PluginFinder使用默认构造函数,并且是一个私有内部类。我得到的例外如下:


    ------ Exception ------

Error:  Could not load file or assembly 'MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

There was an error creating the Plugin Loader.

Could not load file or assembly 'MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.


MM们
浏览 92回答 1
1回答

喵喔喔

我不太确定NUnit在这里做什么,但问题可能是新的AppDomain的基目录不是你所期望的。在创建新域时,请考虑使用父域的设置信息或直接从当前域显式复制基:AppDomain.CreateDomain("PlugInLoader", null, AppDomain.CurrentDomain.SetupInformation);
打开App,查看更多内容
随时随地看视频慕课网APP