jeudi 9 juillet 2015

UI automation testing of WPF controls seems to ignore bindings

I'm currently trying to figure out how to automate UI testing for my WPF application and I have troubles getting it to work.

My XAML of MyControl contains the following CheckBox:

<CheckBox Name="IsFooCheckBox"
    IsChecked="{Binding Path=IsFoo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

The binding points to a custom data context that implements INotifyPropertyChanged and that contains the following property:

public bool IsFoo
{
   get { return _IsFoo; }
   set
   {
      _isFoo = value;
      OnPropertyChanged("IsFoo");
   }
}

The binding is working in production (the context is updated whenever I toggle the checkbox).

I'd like to have a test now that toggles the checkbox and checks that the data context is updated (or to check logic that is implemented in the code-behind). The WPF UI Automation framework seems to be exactly what I am looking for, so I wrote the following NUnit test:

var myContext = ...

var sut = new MyControl
{
   DataContext = myContext
};

var peer = new CheckBoxAutomationPeer(sut.IsFooCheckBox);
var pattern = peer.GetPattern(PatternInterface.Toggle) as IToggleProvider;
pattern.Toggle();

Assert.That(sut.IsProvidingProfileCheckBox.IsChecked); // works
Assert.That(myContext._isFoo); // fails

While the first Assert passes, the second one fails. I do not understand why this happens... it seems that the binding in the XAML file is ignored or that the update is not triggered. Does anybody have a suggestion how to fix my test? Is this even possible?

Aucun commentaire:

Enregistrer un commentaire