Tengo algunas pruebas de unidad que estoy escribiendo para una aplicación WPF, y por más que trate de evitarlo, tengo un código bajo prueba que crea una instancia de una vista. Tan pronto como se crea una instancia de la vista, se evalúan todas las extensiones de marcas, estilos, etc. Para resolver este He creado un maniquí Aplicación y registrado ninguna recursos necesarios cuando se inicializa el conjunto de prueba:Pruebas unitarias Aplicación WPF con el paquete siteoforigin Uri
[TestClass]
public class AssemblyInitialize
{
[AssemblyInitialize]
public static void SetupTestAssembly(TestContext context)
{
if (Application.Current == null)
new Application();
var resources = new List<string>
{
"pack://application:,,,/AssemblyName;component/ResourceDictionary.xaml"
};
foreach(var resource in resources)
{
var uri = new Uri(resource);
var dictionary = new ResourceDictionary { Source = uri };
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
}
}
He usado este enfoque en el pasado, y funciona bien.
Me he encontrado con un pequeño inconveniente con este enfoque. Tengo algunos recursos que usan paquete: // siteoforigin: en el paquete Uri, y cuando las pruebas ejemplifican esta vista, aparece un error acerca de no poder resolver el archivo.
El XAML:
<ResourceDictionary
xmlns="...">
<ImageBrush
x:Key="ResourceName"
ImageSource="pack://siteoforigin:,,,/Resources/image.png"
/>
</ResourceDictionary>
mensaje de error:
Could not find a part of the path 'C:\\Solution\\TestResults\\Workspace_2012-03-01 14_54_29\\Resources\\image.png'
He añadido el directorio de recursos como un elemento de despliegue, y he confirmado que la imagen es la Directorio de salida TestRun. Parece que el dominio de aplicación está funcionando por encima de una carpeta donde la ubicación de mis conjuntos para prueba, ya que el archivo se encuentra realmente en:
c: \ Solution \ Resultado de la Pruebas \ Workspace_2012-03-01 14_54_29 \ fuera \ Resources \ image.png
¿Alguna sugerencia sobre cómo puedo hacer que la aplicación WPF use el directorio Out como su carpeta principal?
¿Funciona forzar manualmente la carpeta base de su Appdomain? 'AppDomain.CurrentDomain.SetData (" APPBASE "," FolderNameHere ");' Parece que hay una manera mejor, pero mi memoria me está fallando. Esto puede ser suficiente (tm). – ianschol
Ha estado investigando esto durante horas. AppDomain.CurrentDomain.BaseDirectory devuelve la carpeta Out. – bryanbcook