模拟从另一个类继承的类

时间:2012-02-07 16:47:47

标签: c# testing refactoring

所以这是场景,我正在重构一些意大利面条代码。我的第一个问题是新建了其他类的一系列类,我通过使我想要测试的类的ctor(Search.cs)将它所需的类作为依赖项来修复它,它现在看起来像这样。

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

我正在进一步向上推新。这一切都很好,但我有一点问题。

我是ctor注入的类继承自另一个类,我有Resharper并且我已经提取了接口,但问题是依赖类继承自另一个具体类 - 看我的意思?

 public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // }

我不知道如何处理DatabaseConnect上的继承?我该如何嘲笑?显然,如果那不存在,我会全部设置我可以模拟一个ISearchDatabaseConnect然后我们去,但我坚持继承一个具体的类。我相信人们已经遇到过这种情况,然而在我找到关于这方面的例子之前我的googl'ing失败了。

提前感谢任何有用的建议。

1 个答案:

答案 0 :(得分: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);