C# 同一类C中的模拟属性和调用方法#

C# 同一类C中的模拟属性和调用方法#,c#,database,methods,mocking,moq,C#,Database,Methods,Mocking,Moq,我有一个包含所有命令(方法)的类CommandExecutor。我必须测试一个从给定的2个参数生成报告的方法。方法使用数据库检查它是否已生成 编辑1: 财产: public IEngine引擎{get;set;} IEngine接口: ICommandExecutor CommandExecutor { get; } IInputReader InputReader { get; } IOutputWriter OutputWriter { get; } IDatabase Databas

我有一个包含所有命令(方法)的类CommandExecutor。我必须测试一个从给定的2个参数生成报告的方法。方法使用数据库检查它是否已生成

编辑1:

财产:

public IEngine引擎{get;set;}

IEngine接口:

ICommandExecutor CommandExecutor { get; }

IInputReader InputReader { get; }

IOutputWriter OutputWriter { get; }

IDatabase Database { get; }
CommandExecutor有一个Execute方法。我有另一个类(命令工厂)创建ICommand。引擎从文件中读取输入,例如,检查输入是否有效,拆分参数等。。。并创建一个ICommand。然后CommandExecutor接受这个ICommand并调用Execute方法。方法Execute有开关案例,每个案例返回一个字符串,如果它成功,或者如果命令未成功,则抛出一个execption。我想对一个依赖于数据库的方法进行单元测试。我可以模拟这个属性引擎(在CommandExecutor中)并调用一个方法来检查它是否正常工作吗?CommandExecutor中的每个方法都调用此.Engine.Database

发动机建造师:

public Engine(
    IInputReader reader,
    IOutputWriter writer,
    ICommandExecutor commandExecutor,
    IDatabase database)
{
    this.InputReader = reader;
    this.OutputWriter = writer;
    this.CommandExecutor = commandExecutor;
    this.CommandExecutor.Engine = this;
    this.Database = database;
}

我模拟了数据库(这个方法也是GetReport),它是一个处理模拟数据库的引擎。如何模拟CommandExecutor引擎属性并调用要测试的方法


谢谢

不是真的不,但是问问自己为什么要这么做。如果您想保证类中的一个方法调用同一类中的另一个方法,那么听起来业务逻辑被封装在其中,您不想绕过它。将其重构为一个新类,并为该方法在其上打上一个接口,将依赖项注入其中,现在您可以模拟它。

CommandExecutor引擎属性的外观如何?类
CommandExecutor
看起来怎么样?请详细说明。
var reportFound = this.Engine.Database.GetReport(name, model);
if (reportFound != null)
{
    throw new DuplicateEntryException(Constants.Duplicate);
}

Do something......

return string.Format(Constants.Test, model, name);