即使引用另一个程序集的方法被覆盖,派生的 class 是否仍然依赖于 parent class 的导入?

Do derived classes still depend on the imports of the parent class, even if the method referencing another assembly is being overridden?

我有一个 parent class 引用外部程序集 (AutoCAD)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.EditorInput;

namespace WBPlugin
{
    public class DoubleInputRetriever : IUserInputRetriever<Double>
    {
        public double getUserInput(string prompt)
        {
           return getUserInput(prompt, 16);
        }

        public virtual double getUserInput(String prompt, Double defaultValue)
        {
            Editor ed = Active.Editor;

            PromptDoubleOptions pdo = new PromptDoubleOptions(prompt);
            pdo.DefaultValue = defaultValue;
            pdo.AllowNone = true;
            pdo.AllowNegative = false;

            PromptDoubleResult pdr = ed.GetDouble(pdo);
            if (pdr.Status != PromptStatus.OK)
            {
                ed.WriteMessage("\n*Cancel*");
                return 0;
            }

            if (pdr.Status == PromptStatus.None)
            {
                return defaultValue;
            }

            return pdr.Value;
        }
    }
}

然后 child class 我试图将“假”数据输入我的工具以便能够在 AutoCAD 之外对其进行单元测试。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WBPlugin;

namespace WBPluginTests.Fakes
{
    public class FakeDoubleInputRetriever : DoubleInputRetriever
    {
        public double ReturnValue { get; set; }

        public FakeDoubleInputRetriever()
        {

        }
        public FakeDoubleInputRetriever(Double value)
        {
            ReturnValue = value;
        }

        public override double getUserInput(string prompt, double defaultValue)
        {
            return ReturnValue;
        }
    }
}

我无法 运行 单元测试,因为它找不到特定的 AutoCAD 程序集,这是有道理的,因为我试图在 AutoCAD 之外进行测试,所以该程序集不可用。

问题是 parent class 正在尝试 运行 但是因为找不到所需的程序集而不能吗?即使它是我在测试中使用的child class,以及将使用的覆盖方法?

继承是最强的一种依赖。创建一个伪实现 IUserInputRetriever<Double> 将您与依赖于 AutoCAD 的具体实现分离。