组织执行测试的方法 - C#

时间:2009-05-22 04:47:58

标签: c# unit-testing testing class-design

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

问题是......如何安排这些以便我可以设置课程以便我可以伪造回购或执行流程?

这是我现在拥有的简化版本。

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

2 个答案:

答案 0 :(得分:1)

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

public interface IDatabase<T> 
{
     T CreateItem();
     T ReadItem(Id id);
     bool UpdateItem(T item);
     bool DeleteItem(T item)
}

使用依赖注入注入数据库列表,使用像Castle WindsorSpring.NET等DI框架,通过Setter或Ctor注入Manager

希望这有意义.. :))

答案 1 :(得分:0)

如果我正确理解了您的问题,那么这听起来需要dependency injection,您需要提供Manager所依赖的对象来完成其工作。它们将是真实的对象(一个实际的数据库连接)或一个像它一样的虚假对象。

我能正确理解你的问题吗?