模拟一个继承自另一个类的类

6

这里是场景,我正在重构一些混乱的代码。我的第一个问题是一连串新建其他类的类链,我通过让我想要测试的类(Search.cs)的构造函数接受所需类作为依赖项来解决此问题,现在它看起来像这样。

 public Search(XmlAccess xmlFile, SearchDatabaseConnect searchDatabaseConnection)
    {
        this.xmlFile = xmlFile;
        FsdcConnection = searchDatabaseConnection;
        Clear();
    }

我在更高的层次上进行新建。这很好,但我有一个小问题。

我正在使用ctor注入的类继承自另一个类,我已经使用Resharper并提取了接口,但问题是依赖类继承自另一个具体类 - 你明白我的意思吗?

 public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // }

我不知道如何处理DatabaseConnect上的继承?我该如何模拟它?显然,如果没有这个问题,我可以模拟ISearchDatabaseConnect并开始工作,但我卡在具体类的继承上。我相信人们以前遇到过这个问题,但我的谷歌搜索失败了,无法找到相关示例。

非常感谢您提供任何有用的建议。


1
仅供参考,“newing it up”通常被称为实例化;-) - Ben Robinson
是的,谢谢 - 这只是个人偏好的问题,我倾向于喜欢术语“newing”,因为它 a) 是代码使用的关键字(好吧,new是)并且 b) 似乎比实例化这个术语更有趣。 - Kenn
1个回答

3

DatabaseConnect也有从中提取出的接口吗?我认为你应该能够像这样设置:

public interface IDatabaseConnect

public class DatabaseConnect : IDatabaseConnect

public interface ISearchDatabaseConnect : IDatabaseConnect

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect

现在创建一个Mock<ISearchDatabaseConnect>将获取两个接口中的所有“内容”。


顺便说一下,您的方法/构造函数应该使用接口而不是具体实现:

public Search(XmlAccess xmlFile, ISearchDatabaseConnect searchDatabaseConnection) { ... }

那么您可以像这样注入模拟数据:

如此一来,您就可以像这样注入模拟数据:

var mockedSearchDatabaseConnect = new Mock<ISearchDatabaseConnect>();
var search = new Search(xmlFile, mockedSearchDatabaseConnect.Object);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接