/// <summary> /// Override plugin directories for testing /// It will remove all test files when disposed /// </summary> /// <param name="pluginDirectories">Plugin directories, default is [ "App_Data/__TestPlugins" ]</param> /// <param name="plugins">Plugins, default is [ "PluginA", "PluginB" ]</param> /// <param name="extra">Extra data, default is empty</param> /// <param name="pluginDirectoryIndex">Which plugin directory will use to create plugins</param> public TestDirectoryLayout( IList <string> pluginDirectories = null, IList <string> plugins = null, IDictionary <string, object> extra = null, int pluginDirectoryIndex = 0) { OverrideIoc = Application.OverrideIoc(); WebsiteConfig = new WebsiteConfig() { PluginDirectories = pluginDirectories ?? new List <string>() { "App_Data/__TestPlugins" }, Plugins = plugins ?? new List <string>() { "PluginA", "PluginB" }, Extra = extra ?? new Dictionary <string, object>() }; CleanupPaths = new List <string>(); // Mock ConfigManager, PathConfig, PathManager, PluginManager var configManagerMock = Substitute.ForPartsOf <ConfigManager>(); configManagerMock.WebsiteConfig.Returns(WebsiteConfig); Application.Ioc.Unregister <ConfigManager>(); Application.Ioc.Unregister <PathManager>(); Application.Ioc.Unregister <PluginManager>(); Application.Ioc.RegisterInstance(configManagerMock); Application.Ioc.RegisterMany <PathManager>(ReuseType.Singleton); Application.Ioc.RegisterMany <PluginManager>(ReuseType.Singleton); // Create plugin directories and plugins var pathManager = Application.Ioc.Resolve <PathManager>(); var pluginManager = Application.Ioc.Resolve <PluginManager>(); var pluginDirectory = pathManager.GetPluginDirectories()[pluginDirectoryIndex]; foreach (var plugin in WebsiteConfig.Plugins) { var directory = Path.Combine(pluginDirectory, plugin); Directory.CreateDirectory(directory); pluginManager.Plugins.Add(PluginInfo.FromDirectory(directory)); } foreach (var directory in pathManager.GetPluginDirectories()) { CleanupPaths.Add(directory); } }