Bonjour à tous !
Dans un contexte de tests unitaires, j'ai d'un côté un objet graphique (Control) dont le code est le suivant :
Bon l'idée générale de l'objet graphique est de se binder sur des propriétés d'un DataContext devant contenir certaines propriétés, histoire de ne pas avoir à les spécifier en Xaml. Lorsque l'une des propriétés du DataContext change, on execute le code métier se trouvant dans la fonction Property1Changed.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class MonControl : Control { public MonControl() { BindingOperations.SetBinding(this, MonControl.Property1, new Binding("PropertyABinder") {Mode = OneWay}); } public bool Property1 {get {...} set {...} public static readonly DependencyProperty Property1 = DependencyProperty.Register(..., new UiPropertyMetadata(false, Property1Changed)); public static Property1Changed(Dependencyobject d, DependencyPropertyChangedEventArgs e) { ((MonControl )d).Called = true; } public bool Called {get;set;} }
Dans la vie, dans le principe, cela fonctionne très bien.
Le problème se pose dans un contexte de tests unitaire, mais je crois qu'il devrait se poser également en mode console.
DAns mon test unitaire j'ai le code suivant :
Et bien ce test ne passe jamais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [TestMethod] public void UnitTest1() { ControlDC dc = new ControlDC(); // DataContext MonControl monControl = new MonControl(){DataContext = dc}; dc.PropertyABinder = true; // changement de valeur dans le DC Assert.AreEqual(true, monControl.Called); }
Et pour cause, après quelques recherches, il semblerait que le mécanisme de Binding ne soit pas activé.
Ca je le vois en évaluant la propriété
monControl.GetBindingExpression(MonControl.Property1).Status qui vaut Unattached.
D'où ma question : comment l'activer manuellement ? Est-ce possible ?
Merci pour vos réponses
Partager