我有一个方法,它调用.NET XDocument.Load()方法从url加载xml数据。我想让我的课堂单元成为可测试的。如何在存在依赖关系时设计可模拟性?
那么如何使这个调用嘲笑/单元可测试?我用
private void ProcessData(string url)
{
// todo: make this mockable
var xDocument = XDocument.Load(url);
// the rest of the code
}
一种解决方案是注入的xmlUrlLoader到像下面的CLAS:
private readonly Func<string, XDocument> _xmlUrlLoader;
public MyConstructor(Func<string,XDocument> xmlUrlLoader)
{
_xmlUrlLoader = xmlUrlLoader;
}
private void ProcessData(string url)
{
// todo: make this mockable
var xDocument = this._xmlUrlLoader(url);
// the rest of the code
}
有没有什么更好的办法?
我想把URL的责任推到一个层面。所以有一个函数将数据作为字符串或'XDocument'处理,然后对其进行处理,然后在它上面打包下载数据并将其传递给处理函数。没有嘲笑需要。 – CodesInChaos
如果我在哪里,我只是通过xDocument这个方法。 –
@KirillBestemyanov我无法将xDocument传递给它;我不想调用xDocument.Load,这应该被嘲笑/孤立。 –