对于我正在开发的新项目,我的团队和我正在尝试使用ReSharper 10,NUnit,SpecFlow和Selenium设置一些功能测试。我们从一个已知的工作项目中迁移了一堆旧代码,并将其构建成没有问题。
但是,当我们运行代码时,我们不断收到以下错误:
OneTimeSetUp: System.IO.DirectoryNotFoundException : Could not find a part of the path 'C:\Users\Me\AppData\Local\SomeApp\App_Data\SomeApp.db'.
Exception doesn't have a stacktrace
......这不对;如果它找不到SomeApp.db
文件,则应该从C:\MyProjects\SomeApp\SomeApp.Web\App_Data\SomeApp.db
失败!
本案例中的相关代码位于TestSuite.cs类中:
[Binding]
public class TestSuite
{
private string _currentPath;
private string _localFile;
private string _websiteBinPath;
private string _websiteDataPath;
// Stuff...
[BeforeTestRun]
public static void BeforeTestRun()
{
_currentPath = Directory.GetCurrentDirectory() + @"\";
// Data:
// <add key="TestWebsiteDataRelativePath" value="..\..\..\SomeApp.Web\App_Data\" />
// <add key="TestWebsiteBinRelativePath" value="..\..\..\SomeApp.Web\bin\" />
_websiteBinPath = Path.Combine(_currentPath, ConfigurationManager.AppSettings["TestWebsiteBinRelativePath"]);
_websiteDataPath = Path.Combine(_currentPath, ConfigurationManager.AppSettings["TestWebsiteDataRelativePath"]);
//removes the ../../../
_websiteBinPath = Path.GetFullPath((new Uri(_websiteBinPath)).LocalPath);
_websiteDataPath = Path.GetFullPath((new Uri(_websiteDataPath)).LocalPath);
_localFile = _websiteDataPath + "SomeApp.db";
DoStuffWithLocalFile();
}
// Stuff...
}
我们在代码的第一个可执行行上设置断点,然后逐步执行代码,直到currentPath
有一个值 - currentPath
所拥有的目录为C:\Users\Me\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14\
!
我们已经通过ReSharper选项禁用了Shadow Copy,另外,我还从ReSharper选项中禁用了MSTest支持。但是,测试项目仍然无法在C:\MyProjects\SomeApp\SomeApp.FeatureTest\bin\Debug
目录之外运行。
问题:
我可以通过哪种方式让我的功能测试项目从C:\MyProjects\SomeApp\SomeApp.FeatureTest\bin\Debug
运行,不从C:\Users\Me\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14\
运行?
答案 0 :(得分:6)
您使用的是NUnit 3.0吗?如果是,请参阅NUnit 3.0 Breaking-Changes page:
CurrentDirectory不再设置为包含测试的目录 部件。使用TestContext.TestDirectory找到该目录。