进行试验的组织方法-C#

进行试验的组织方法-C#,c#,unit-testing,testing,class-design,C#,Unit Testing,Testing,Class Design,我现在有一个类,在这个类中有15个左右的私有方法,它们在计时器运行的循环中执行某些任务。其中有些方法调用数据库,有些则不调用 问题是…我如何安排这些,以便我可以设置类,以便我可以伪造一个repos或执行过程 这是我现在的一个简化版本 public class Manager : IManager { System.Timers.Timer tm; private bool runningAsService; private List<Database> Dat

我现在有一个类,在这个类中有15个左右的私有方法,它们在计时器运行的循环中执行某些任务。其中有些方法调用数据库,有些则不调用

问题是…我如何安排这些,以便我可以设置类,以便我可以伪造一个repos或执行过程

这是我现在的一个简化版本

public class Manager : IManager
{
    System.Timers.Timer tm;
    private bool runningAsService;
    private List<Database> Databases = new List<Database>();
    private LogClass Log;

    public Manager(bool RunningAsService, LogClass log)
    {
        runningAsService = RunningAsService;
        Log = log;

        tm = new System.Timers.Timer(Settings.idle_time * 1000);
        tm.Elapsed += new System.Timers.ElapsedEventHandler(delegate { PerformDuties(); });
    }

    public void Start()
    {
        tm.Start();
        PerformDuties();
    }

    private PerformDuties()
    {
        //Call the other 10-15 private methods to perform all the tasks needed.
    }
}
公共类管理器:IManager
{
System.Timers.Timer tm;
私人布尔运行服务;
私有列表数据库=新列表();
私有日志类日志;
公共管理器(布尔运行服务,日志类日志)
{
RunningAService=RunningAService;
Log=Log;
tm=新系统.定时器.定时器(Settings.idle_time*1000);
tm.appead+=new System.Timers.ElapsedEventHandler(委托{PerformDuties();});
}
公开作废开始()
{
tm.Start();
性能();
}
私人表演()
{
//调用其他10-15个私有方法来执行所有需要的任务。
}
}

如果我正确理解了您的问题,那么这听起来像是需要在哪里提供对象管理器来完成其工作。它们可能是真实的对象(一个实际的数据库连接),也可能是一个与之类似的伪对象


我是否正确理解了您的问题?

每个Db操作都将以CRUD操作结束。因此,您可以从数据库类中提取IDatabase,换句话说,提取数据访问层,如下所示:

public interface IDatabase<T> 
{
     T CreateItem();
     T ReadItem(Id id);
     bool UpdateItem(T item);
     bool DeleteItem(T item)
}
公共接口IDatabase
{
T CreateItem();
T ReadItem(Id);
bool更新项(T项);
bool删除项(T项)
}
并通过Setter或Ctor注入,使用依赖项注入(使用DI框架等)将数据库列表注入到
管理器
类中


希望这有意义……)

是的……我想是的……只是不知道如何构造它,这样我就不必点击数据库来测试它。我了解数据库的另一面,它更多的是关于其他方法,因此如果我有一个ITaskRunner,我将它传递到ctor,它也需要日志,那么它是否还需要将日志实例传递给TaskRunner以及管理器??