Reputation: 772
I have a test project in which I needs to load an XLSX file. For that, I added a file with copy-always so that it ends up in the build directory, but all of the following return a wrong path:
System.Reflection.Assembly.GetAssembly(typeof(testclass)).Location;
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory();
They all give me:
"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestResults\\username_ICT003 2012-06-20 12_07_06\\Out"
and I need
"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestProject\\bin\\Debug\\SupportFiles\\"
How do I accomplish that?
Upvotes: 11
Views: 17653
Reputation: 16160
Switch to xUnit or NUnit.
Then both option 2., 3. and Environment.CurrentDirectory
works as needed, returning the build-output-diretory. Remove "bin\Debug" or "bin\Release" and files can be left at 'Do not copy'.
Also see the GetFileFromMethod-method and usage in ElasticSearch for a nice way to have one file per test.
Upvotes: 2
Reputation: 1183
In case someone like me comes along, if you're using a .testsettings file and the DeploymentItem attribute on the class doesn't work even though you've set your files as Content and to Always Copy, it's because either you already have a Deployment section in your .testsettings file or you need to use DeploymentItem in the .testsettings file. Here's how ours looks now:
<Deployment>
<DeploymentItem filename="Tests\Unit Tests\ConnectionStrings.config" />
<DeploymentItem filename="Tests\Unit Tests\<project dir>\bin\Debug\TestFiles\" outputDirectory="TestFiles" />
</Deployment>
One does a file, the other does 13 files in a directory. Note the trailing slash for the directory's "filename"!
Solution and more info was found at:
MsTest DeploymentItem OutputDirectory in testsettings
Upvotes: 1
Reputation: 8962
Use the DeploymentItemAttribute attribute. To quote MSDN:
This attribute identifies files and directories that contain files that are used by the deployed test to run. The test engine makes a copy of the deployment items and places them in test deployment directory based upon the OutputDirectory specified or the default directory.
For example:
[TestClass]
public class MyUnitTest
{
[TestMethod()]
[DeploymentItem("myfile.txt")]
public void MyTestMethod()
{
string file = "myfile.txt";
Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
" did not get deployed");
}
}
Of course assuming you are using MSTest as your testing framework.
Upvotes: 9
Reputation: 57593
Try this:
string dir = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"SupportFiles");
Don't use Directory.GetCurrentDirectory()
because current directory could not be your exe dir and may change during program execution.
Upvotes: 11