2013-07-25 2 views
2

Я создал прикрепленное свойство, которое работает с WPF WebBrowser. Класс WebBrowser запечатан, поэтому я не могу его откупорить. Код похож на этот:Как выполнить модульное тестирование вложенного объекта WebBrowser?

private static void BindableSourcePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    WebBrowser browser = sender as WebBrowser; 
    if (browser != null) 
    { 
     browser.NavigateToString(e.NewValue.ToString()); 
    } 
} 

Есть ли способ проверить это другое, что положить некоторую логику на производстве код, который позволяет тест пройти (как WebBrowser browser = sender as WebBrowser || sender as TestWebBrowser)

ответ

2

Использование Rhino Вы можете подделать метод косвенно используя обертку для вызова класса WebBrowser.
Например:

private static void BindableSourcePropertyChanged(DependencyObject sender, 
              DependencyPropertyChangedEventArgs e) 
{ 
    WebBrowser browser = sender as WebBrowser; 
    if (browser != null) 
    { 
     BindableSourcePropertyChanged(new MyWebBrowser(browser), e); 
    } 
} 

private static void BindableSourcePropertyChanged(MyWebBrowser browser, 
              DependencyPropertyChangedEventArgs e) 
{ 
     browser.NavigateToString(e.NewValue.ToString()); 
} 

Где MyWebBrowser обертка, которая перенаправляет вызовы к реальному WebBrowser, так как он не запечатан может быть подделана. Первоначальный обратный вызов не будет протестирован, но логика почти не имеет смысла, поскольку она просто переводит объект в оболочку.

Если вы не ограничены Rhino, возможно, вы можете использовать изоляционную структуру, которая поддерживает поддельные элементы. Например, с помощью Isolator это будет выглядеть следующим образом:

var browser = new WebBrowser(); 
Isolate.WhenCalled(() => browser.NavigateToString(null)).IgnoreCall(); 

Есть другие механизмы, которые поддерживают запечатанные член/классы Подделки кроме изолятора.
Отказ от ответственности - Я работаю в TypeMock

+0

Я буду использовать вызов обертки, как мы хотели бы продолжить с носорогом, в основном потому, что это бесплатно, и мы большая команда кодирования. –