Модульный тест Привязка WPF

Мы можем match names из list с id кадра данных, unlist list соответственно и добавить его в value

df$value <- unlist(l[match(df$id, names(l))]) + df$value

df
#  id value
#1  a     4
#2  b     6

[1113 ] РЕДАКТИРОВАТЬ

Если у нас есть несколько записей в списке, нам нужно sum каждый список после сопоставления. Мы можем сделать

df$value <- df$value + sapply(l[match(df$id, names(l))], sum)
df

#  id value
#1  a     6
#2  b     7
10
задан NotDan 1 December 2008 в 15:44
поделиться

2 ответа

Shane, если то, по поводу чего Вы действительно волнуетесь, является привязкой, повреждающейся тихо, необходимо посмотреть на перенаправление обязательных трассировок где-нибудь, можно исследовать. Я запустил бы здесь:

http://blogs.msdn.com/mikehillberg/archive/2006/09/14/WpfTraceSources.aspx

Кроме этого, я соглашаюсь с Gishu, что привязка не является хорошими кандидатами на поблочное тестирование, главным образом из-за автоволшебства, продолжающегося, который Gishu упомянул в "Эпилоге". Вместо этого внимание на проверку базового класса ведет себя правильно.

Обратите внимание также, что можно получить еще больше устойчивых трассировок с помощью класса PresentationTraceSources:

http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx

Надежда, которая помогает!

2
ответ дан 4 December 2019 в 01:32
поделиться

Глазное яблоко это.
Этот вид декларативной разметки редко повреждается.. если кто-то не входит в руководство и завинчивает его. Даже затем можно зафиксировать его в течение минут. По моему скромному мнению, стоимость записи таких тестов явно перевешивает преимущества.

Обновление [Dec3,08]: Alrighty затем.
Тест просто тестирует это, текстовое поле имеет значение "FirstName" как свойство Path привязки. Если бы я изменяюсь/осуществляю рефакторинг FirstName на JustName в фактическом объекте источника данных, тест все еще передал бы, так как он тестирует против анонимного типа. (Зеленый тест, когда взломанный код - Антишаблон TDD: Лгун), Если Ваша цель состоит в том, чтобы проверить, что FirstName был указан в XAML,

Assert.AreEqual("FirstName", txtBoxToProbe.GetBindingExpression(TextBox.TextProperty).ParentBinding.Path.Path);

Если действительно необходимо поймать поврежденную привязку через модульные тесты (и не хотят показывать UI), используйте реальный источник данных... боролся некоторое время и придумал это.

[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);
} 

Эпилог: существует некоторый реальный тайный материал, происходящий в вызове с Window.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();

Еще раз я озвучиваю свое нежелание против этого подхода. Получение NUnit работать в STA было болью..

1
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: