I am writing some unit tests in which I need a fake xml file. I can create that file and require it to be deployed with the unit tests, but experience shows that at my offic
Use a resources (resx file) and add your xml file. Then you can access using MyNs.MyResources.MyXmlFile.
If the contents are static, why can't you commit it to source control? Add it to your project and then it will always be exactly where you expect it to be.
Why don't you include it in a resource?
You can do this with a T4 template. What you need is 3 things
Something like this for your template.tt
file
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#
string TextFromFile = File.ReadAllText(Host.ResolvePath("my_file_next_to_my_template.txt"));
#>
// This is the output code from your template
namespace MyNameSpace
{
class MyGeneratedClass
{
static void main (string[] args)
{
System.Console.WriteLine("<#= TextFromFile #>");
}
}
}
If you don't want to configure your template to be re-created on the build then just opening it and saving it will do the trick.
You can go the resource file route but, depending on how many resources/how large they are (and XML can be large), you may eventually run into compilation problems (I did).
I've since transitioned from resources to singletons. Reading a text file in with File.ReadAllText is pretty dead simple and it's still IntelliSense-friendly.
I usually add such test files directly into the unit test C# project and set them as "Content" and "Copy if newer" to be copied to the bin directory during the compilation.