2009-05-22 9 views
0

J'ai une classe pour le moment et dans cette classe il y a environ 15 méthodes privées qui effectuent certaines tâches sur une boucle exécutée par une minuterie. Certaines de ces méthodes appellent à la base de données et d'autres non.Organisation des méthodes pour effectuer des tests - C#

La question est ... comment puis-je les organiser pour que je puisse configurer la classe afin que je puisse simuler un repos ou l'exécution du processus ??

Ceci est une version simplifiée de ce que j'ai maintenant.

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

Répondre

0

Si je comprends bien votre question alors cela ressemble à un besoin de dependency injection où vous fournissez les objets gérant dépend de faire son travail. Ils seraient des objets réels (une connexion de base de données réelle) ou un faux qui agit comme ça. Est-ce que je comprends votre question correctement?

+0

Ouais ... penser .... tout simplement pas sûr de savoir comment structurer de telle sorte que je ne avoir à frapper un db pour le tester. – Schotime

1

Chaque opération Db se terminerait soit par des opérations CRUD. Ainsi, vous pouvez en extraire IDatabase de votre classe de base de données dans d'autres mots abstraits votre couche d'accès aux données, à quelque chose comme ceci:

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

Et injecter Liste des bases de données à l'aide d'injection de dépendance à l'aide d'un cadre de DI comme Castle Windsor, Spring.NET etc, soit par des injections Setter ou ctor à votre Manager classe

espoir ce sens .. :)

+0

Je comprends le DB côté plus les autres méthodes de sorte que si j'ai un ITaskRunner que je passe dans le ctor et il a également besoin du journal, alors il doit également passer l'instance du journal au TaskRunner ainsi que le directeur?? – Schotime

Questions connexes