如何对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
)
使用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