Problems with DeploymentItem attribute
I have also faced similar problems but i found easy 3 step solution for this:
Assuming your folder structure looks like this:
SolutionFolder\
TestProjectFolder\
SubFolder\
- Go to "Solutions Items/Local.testsettings" > "Deployment" > Check "Enable Deployment"
- If you are using VS2010, make sure any files you want to deploy have their "Copy To Output Folder" property set to "Copy Always" or "Copy if Newer"
- Attribute your TestMethod with either one of:
[DeploymentItem(@"TestProjectFolder\SubFolder")]
to deploy all contents of<SubFolder>
to the Test Run directory[DeploymentItem(@"TestProjectFolder\SubFolder", "TargetFolder")]
to deploy all contents of<SubFolder>
to<TargetFolder>
in the Test Run directory
One final note about MSTest (at least for VS2010):
If you want the <TargetFolder>
to have the same name as the <SubFolder>
, using [DeploymentItem(@"SubFolder", @"SubFolder")]
will fail silently as the MSTest runner hits a silly edge case. This is why you should prefix the <SubFolder>
with the <TestProjectFolder>
as so: [DeploymentItem(@"TestProjectFolder\SubFolder", @"SubFolder")]
For hopefully helping someone else out: I tried all the suggestions here and still my deployment item was not being copied.
What I had to do (as suggested here) was to add a second parameter to the DeploymentItem attribute:
[DeploymentItem(@"UnitTestData\TestData.xml", "UnitTestData")]
DeploymentItem
is a bit of a mess.
Each file in your solution will have a "Copy To Output Folder" setting in VS.NET. You need this to be "Copy Always" (or similar) in order to get the files into the output folder.
Check that you've got this set for the new files. If you don't have this set then the files won't get copied to the output folder, and then they can't be deployed from the output folder to the folder where MSTest does it stuff.
Personally, if I have files that I need for my unit tests I've found that embedding those files as resources into an assembly, and having that assembly "unpack" itself during the tests is a more predictable way of doing things. YMMV.
note: These comments are based upon my experience with VS2010. Comments to my answer would suggest that this is not problem with VS2012. I still stand by comments that using embedded resources involves less "magic" and, for me, makes the "arrange" stage of my unit tests much more explicit.
In VS2010, my Local.testsettings had the "Enable Deployment" unchecked and the DeploymentItem attribute was not working. I checked it and everything worked fine. I hope this helps!