如何对WebBrowser附加的属性进行单元测试

本文关键字:属性 单元测试 WebBrowser | 更新日期: 2023-09-27 18:24:45

我创建了一个可与WPF 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

如何对WebBrowser附加的属性进行单元测试

使用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,也许您可以使用一个支持密封成员false的隔离框架。例如,使用Isolator,它看起来像:

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

除了Isolator之外,还有其他支持密封成员/类伪造的框架
免责声明-我在Typemock

工作