2009-04-14 10 views
11

Ich habe ein einfaches Fenster mit einem Verweis auf eine StaticResource in der App.xaml.Testen eines WPF-Fensters mit StaticResources

App.xaml Ressourcendefinition:

<!-- Standard Text Box Style --> 
<Style x:Key="textBoxStyleStd" TargetType="{x:Type TextBox}"> 
    <Setter Property="FontSize" Value="14" /> 
</Style> 

Fenster componets mit der Ressource:

<TextBlock Grid.Column="1" Grid.Row="0" Name="stationIdTitle" 
      Style="{StaticResource textBlockStyleStd}" 
      VerticalAlignment="Center" HorizontalAlignment="Center" 
      Text="{LocText Key=Title, Dict={StaticResource Dictionary}, 
       Assembly={StaticResource Assembly}}"/> 

Wenn Komponententest versucht, dieses Fenster ich den Fehler:

System.Windows.Markup.XamlParseException: Cannot find resource named '{textBlockStyleStd}'. Resource names are case sensitive. Error at object 'stationIdTitle' in markup file 'Zpg;component/guicomponenets/screens/enterstationidscreen.xaml' Line 23 Position 71.

Ist gibt es einen Weg um dies? Mein Einheitentestcode lautet:

[Test] 
public void TestEnterKeyPressedNoText() 
{ 
    IPickingBusinessObject pickingBusinessObject = mock.StrictMock<IPickingBusinessObject>(); 

    EnterStationIdScreen objectUnderTest = new EnterStationIdScreen(pickingBusinessObject); 

    Assert.AreEqual(Visibility.Visible, objectUnderTest.stationIdError.Visibility); 

    Assert.AreEqual("werwe", "oksdf"); 

    Replay(); 

    objectUnderTest.EnterKeyPressed(); 

    Verify(); 
} 
+0

Mögliche Lösung könnte StaticResource mit DynamicResource-Bindung ersetzen – Boogier

Antwort

12

Dank Kent,

schaute ich auf Ihre Vorschläge und in den meisten Szenarien stimme ich Modelle verwendet werden soll und wie getestet, gibt es einige Code mit den Kontrollen (z TextBox Sichtbarkeit) ich noch testen wollte zugeordnet ist. Um dies zu umgehen, können Sie eine Instanz Ihrer Anwendung erstellen (aber nicht initialisieren) und die Ressourcen manuell hinzufügen. Dies führt zu Doppelungen in der App.xaml und dem Basiseinheitstest, aber dies ermöglicht es mir, die gewünschten Tests durchzuführen.

 if (Application.Current == null) 
     { 
      App application = new App(); 

      #region Add Static Resources from the App.xaml 

      Style textBoxStyle = new Style(typeof(TextBox)); 
      textBoxStyle.Setters.Add(new Setter(TextBox.FontSizeProperty, 14d)); 

      Style textBlockStyle = new Style(typeof(TextBlock)); 
      textBlockStyle.Setters.Add(new Setter(TextBlock.FontSizeProperty, 14d)); 

      application.Resources.Add("TextBoxStyleStd", textBoxStyle); 
      application.Resources.Add("TextBlockStyleStd", textBlockStyle); 
      application.Resources.Add("TextBlockStyleError", textBlockStyle); 
      application.Resources.Add("Assembly", "Zpg"); 

      #endregion 
     }  
+0

+1 cos dies half aus einer ähnlichen Bindung sein .. danke! – PaulJ

+4

hatte ein ähnliches Problem, einfach app.InitializeComponent() neben dem Erstellen der Instanz aufrufen. Die Ressourcenwörterbücher werden ausgefüllt. Genau das macht die Main-Methode. Dies ist das Snippet von der Hauptmethode, Sie könnten die App überspringen.Wenn wir Unit-Tests hier sind. [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] public static void Haupt() { WPFComboBox.App app = neu WPFComboBox.App(); app.InitializeComponent(); app.Lauf(); } – ioWint

+1

} Wenn Sie eine statische Ressource verwenden, um ein 'UserControl's' Style' als Standard zu definieren, wie zum Beispiel '