2009-05-22 8 views
0

Ich habe eine Klasse im Moment und innerhalb dieser Klasse hat es 15 private Methoden, die bestimmte Aufgaben auf einer Schleife von einem Timer ausgeführt werden. Einige dieser Methoden rufen die Datenbank auf, andere nicht.Organisieren Methoden für die Durchführung von Tests - C#

Die Frage ist ... wie kann ich diese so arrangieren, dass ich die Klasse einrichten kann, damit ich einen Repos oder ausführenden Prozess vortäuschen kann?

Dies ist eine vereinfachte Version von dem, was ich jetzt habe.

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

Antwort

0

Wenn ich das richtig verstehe Ihre Frage dann klingt dies wie ein Bedürfnis nach dependency injection, wo Sie die Objekte-Manager liefern, hängt von seiner Arbeit zu tun. Sie wären echte Objekte (eine tatsächliche Datenbankverbindung) oder eine falsche, die sich einfach so verhält.

Verstehe ich Ihre Frage richtig?

+0

Ja ... so denkt .... nur nicht sicher, wie es so zu strukturieren, dass ich nicht tun muss eine db treffen, um es zu testen. – Schotime

1

Jede Db-Operation würde beendet werden, wenn sie eine der CRUD-Operationen ist. So können Sie IDatabase aus Ihrer Datenbank-Klasse in anderen Worten abstrakt aus Ihrem Data Access Layer extrahieren, zu etwas wie folgt aus:

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

Und injizieren Liste der Datenbanken mit Dependency Injection eine DI-Framework wie Castle Windsor verwenden, Spring.NET etc entweder durch Setter oder Ctor Injektionen zu Ihrer Manager Klasse

Hoffnung macht den Sinn .. :)

+0

Ich verstehe die DB-Seite, es ist mehr über die anderen Methoden, so dass, wenn ich einen ITaskRunner habe, dass ich in die CTor übergeben und es auch das Protokoll benötigt, dann muss es auch die Instanz des Protokolls an den TaskRunner übergeben der Geschäftsführer?? – Schotime