Организация методов выполнения тестов - C # - PullRequest
0 голосов
/ 22 мая 2009

У меня есть класс на данный момент, и в этом классе у него есть около 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 ]

1 голос
/ 22 мая 2009

Каждая операция Db будет заканчиваться как операция CRUD. Таким образом, вы можете извлечь IDatabase из вашего класса Database, другими словами, абстрагировать ваш уровень доступа к данным в что-то , например:

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

И добавление списка баз данных с использованием Dependency Injection с использованием DI-фреймворка, такого как Castle Windsor , Spring.NET и т. Д., Либо путем инъекций Setter или Ctor в ваш Manager класс

Надеюсь, это имеет смысл ..:)

0 голосов
/ 22 мая 2009

Если я правильно понимаю ваш вопрос, то это звучит как необходимость внедрения зависимостей , когда вы предоставляете объекты, от которых зависит работа менеджера. Они могут быть реальными объектами (фактическим соединением с базой данных) или поддельными, которые просто действуют так.

Правильно ли я понимаю ваш вопрос?

...