如何从我的测试代码中确定解决方案路径?
我正在尝试为插件架构编写测试。我有一些假的类在我的解决方案中的一个单独的项目中实现我的插件接口。在这些构建之后,使用构建后事件将dll复制到“plugins”文件夹中:
copy "$(TargetPath)" "$(SolutionDir)TestPlugins"
我的测试代码在该位置查找插件,并将插件类型加载到集合中供以后使用。
目前,我不得不在我的测试中对'plugins'文件夹路径进行硬编码,这很糟糕。
哦,我正在使用Visual Studio的内置测试项目(而不是NUnit),以防万一。
答案 0 :(得分:2)
相对路径有效,但我们需要从激励二进制文件中进行跟踪,该二进制文件被隐藏在测试项目中。
string solutionPath = Directory
.GetParent(Assembly.GetExecutingAssembly().Location)
.Parent.Parent.Parent.FullName;
string pluginPath = Path.Combine(solutionPath, "TestPlugins");
需要以下
using System.IO;
using System.Reflection;
不是最优雅的解决方案,但它确实有效。
答案 1 :(得分:1)
一种可能的解决方案是为测试项目创建一个构建后事件来编写配置。即沿着这条线:
echo $(SolutionDir)TestPlugins > $(TargetDir)PluginConfig.cfg
从测试中读取配置文件。
答案 2 :(得分:0)
如果你知道插件相对于实际解决方案的位置,你可以做一个相对路径。这仍然是硬编码的,但是比100%硬编码路径更好的小条子。另一种选择是设置文件,指出插件的路径,无论系统如何,因此您可以简单地从文件中读取该设置并以此方式使用它。让我知道,如果这些都不适合你,我可以让你知道我能想出什么。
答案 3 :(得分:0)
要添加“Stewart Ritchie”的答案(顺便说一句,这很好用!),“。Parent”参数的数量取决于你想要将树递归到执行程序集的距离。因此,如果您继续获取IOExceptions表示找不到该目录,那么要做的是检查返回的solutionPath的值,以确定是否需要添加或删除一些递归级别以到达您所在的路径寻找。
- 快乐的编码!