模拟从另一个类继承的类

本文关键字:继承 另一个 模拟 | 更新日期: 2023-09-27 18:23:52

这是一个场景,我正在重构一些意大利面条代码。我的第一个问题是一系列新的类,我通过让我要测试的类的ctor(Search.cs)将它需要的类作为依赖项来解决这个问题,现在看起来是这样的。

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

我正在把它往上推。这很好,但我有一个小问题。

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

 public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // }

我不知道如何处理DatabaseConnect上的继承?我该怎么嘲笑它?很明显,如果没有这一点,我会全力以赴,我可以模拟ISearchDatabaseConnect,然后我们就走了,但我被一个具体类的继承所束缚。我相信在我的谷歌搜索失败之前,人们就已经遇到过这种情况。

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

模拟从另一个类继承的类

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) { ... }

这样你就可以注入mock,比如:

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