Существует ли *чист* способ заставить свойство зависимости только для чтения отразить значение другого свойства?

  • Модульный тест : Укажите и протестируйте одну точку контракта отдельного метода класса. Это должно иметь очень узкий и четко определенный объем. Сложные зависимости и взаимодействия к внешнему миру заблокированы или дразнили .

  • Интеграционный тест : Протестируйте корректное взаимодействие нескольких подсистем. Существует целый спектр там, от тестирования интеграции между двумя классами, к тестированию интеграции с продуктивной средой.

  • Испытание с помощью дыма (иначе Проверка работоспособности) : тест простой интеграции, где мы просто проверяем, что, когда система под тестом вызывается, он обычно возвращается и не аварийно завершается.

    • Испытание с помощью дыма является оба аналогией с электроникой, где первый тест происходит при включении схемы (если это курит, это плохо!)...
    • ... и, , по-видимому , с инфраструктура , где система каналов буквально заполнена дымом и затем проверенная визуально. Если что-нибудь курит, система является текучей.
  • Регрессионный тест : тест, который был записан, когда ошибка была исправлена. Это гарантирует, что эта определенная ошибка не произойдет снова. Полное имя является "нерегрессионным тестом". Это может также быть тест, сделанный до изменения приложения, чтобы удостовериться, что приложение обеспечивает тот же результат.

  • К этому, я добавлю:

    • Приемочное испытание : Тест, что функция или вариант использования правильно реализованы. Это подобно интеграционному тесту, но с вниманием на вариант использования для обеспечения, а не на включенные компоненты.

    • Тестирование системы : Тестирует систему как черный квадрат. Зависимости от других систем часто дразнят или блокируют во время теста (иначе, это было бы больше интеграционного теста).

    • Проверка перед полетом : Тесты, которые повторяются в подобной производству среде, для облегчения, 'основываются на моей машине' синдром. Часто это понято путем выполнения приемочного испытания или испытания с помощью дыма в производстве как среда.

5
задан Giffyguy 19 August 2009 в 17:39
поделиться

2 ответа

К сожалению, вам понадобится большая часть того, что у вас есть. IValueConverter в этом случае не требуется, поэтому вы можете упростить его до:

public class foo : FrameworkElement
{
    private static readonly DependencyPropertyKey ReadOnlyIntPropertyKey =
        DependencyProperty.RegisterReadOnly( "ReadOnlyInt", typeof(int),
                                         typeof(foo), null);
    public int ReadOnlyInt
    {
       get { return (int)GetValue(ReadOnlyIntPropertyKey.DependencyProperty); }
    }

    public static readonly DependencyProperty ReadWriteStrProperty =
        DependencyProperty.Register( "ReadWriteStr", typeof(string), typeof(foo),
                                 new PropertyMetadata(ReadWriteStr_Changed));

    public string ReadWriteStr
    {
       get { return (string)GetValue(ReadWriteStrProperty); }
        set { SetValue(ReadWriteStrProperty, value); }
    }

    private static void ReadWriteStr_Changed(DependencyObject d,
                                        DependencyPropertyChangedEventArgs e)
    {
         foo f = d as foo;
         if (f != null)
         {
              int iVal;
              if (int.TryParse(f.ReadWriteStr, out iVal))
                  f.SetValue( ReadOnlyIntPropertyKey, iVal);
         }
    }
}
4
ответ дан 14 December 2019 в 13:43
поделиться

Это не так плохо, как вы предлагаете, ИМХО ...

Можно избавиться от конвертера: IValueConverter предназначен для привязок, он вам не нужен для преобразований в коде программной части. Кроме того, я не понимаю, как вы могли бы сделать его более кратким ...

1
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

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