इसे नजरअंदाज करें।
इस प्रकार की घोषणात्मक मार्कअप शायद ही कभी टूट जाती है .. जब तक कि कोई मैनुअल में नहीं जाता और इसे खराब करता है। फिर भी, आप इसे मिनटों में ठीक कर सकते हैं। आईएमएचओ इस तरह के परीक्षणों को लिखने की लागत लाभ से कहीं अधिक है।
अद्यतन [दिसंबर 3,08]: ठीक है तो।
परीक्षण सिर्फ यह जांच रहा है कि टेक्स्टबॉक्स में बाध्यकारी की पथ संपत्ति के रूप में "फर्स्टनाम" मान है। यदि मैं वास्तविक डेटा स्रोत ऑब्जेक्ट में JustName को FirstName में बदलता/दोबारा बदलता हूं, तो परीक्षण अभी भी गुजरता है क्योंकि यह किसी अज्ञात प्रकार के विरुद्ध परीक्षण कर रहा है। (जब कोड टूट ग्रीन परीक्षण - TDD Antipattern: झूठे) अपने उद्देश्य की पुष्टि है कि प्रथम XAML में निर्दिष्ट किया गया है, तो
Assert.AreEqual("FirstName", txtBoxToProbe.GetBindingExpression(TextBox.TextProperty).ParentBinding.Path.Path);
तुम सच में (इकाई परीक्षण के माध्यम से टूट बाइंडिंग को पकड़ने और करना आवश्यक है नहीं है यूआई दिखाना चाहते हैं), असली डेटा स्रोत का उपयोग करें ... थोड़ी देर के लिए संघर्ष किया और इसके साथ आया।
[Test]
public void TestTextBoxBinding()
{
MyWindow w = new MyWindow();
TextBox txtBoxToProbe = w.TextBox1;
Object obDataSource = w; // use 'real' data source
BindingExpression bindingExpr = BindingOperations.GetBindingExpression(txtBoxToProbe, TextBox.TextProperty);
Binding newBind = new Binding(bindingExpr.ParentBinding.Path.Path);
newBind.Source = obDataSource;
txtBoxToProbe.SetBinding(TextBox.TextProperty, newBind);
Assert.AreEqual("Go ahead. Change my value.", txtBoxToProbe.Text);
}
उपसंहार: कुछ real covert stuffWindow.Show()
करने के लिए कॉल में क्या हो रहा है। यह किसी भी तरह से जादुई रूप से DataItem प्रॉपर्टी सेट करता है जिसके बाद डेटा बाध्यकारी काम करना शुरू कर देता है।
// before show
bindingExpr.DataItem => null
bindingExpr.Status => BindingStatus.Unattached
// after show
bindingExpr.DataItem => {Actual Data Source}
bindingExpr.Status => BindingStatus.Active
एक बार बाध्यकारी सक्रिय है, मुझे लगता है आप इस तरह कोड के माध्यम से पाठ बॉक्स अपडेट मजबूर कर सकते हैं ..
txtBoxToProbe.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
बार फिर, मैं इस दृष्टिकोण के खिलाफ मेरी अनिच्छा आवाज। एसटीए में चलाने के लिए एनयूनीट प्राप्त करना एक दर्द था ..
हम एक कक्षा में गुण के लिए बाध्य कर रहे हैं, और वर्ग refactor हैं, XAML अभी भी संकलन होगा, लेकिन कोई अपवाद नहीं फेंक दिया जाएगा और हमारे अभी तक ऐप्स नहीं फ़ंक्शन ठीक बाइंडिंग गलत हो जाएगा के रूप में होगा। यह हमारे लिए पहले से ही एक मुद्दा रहा है इसलिए हम समाधान की तलाश में हैं। – NotDan