2009-10-07 6 views
3

Je travaille sur une application de serveur Web qui gère les demandes reçues de téléphones mobiles. J'ai des adaptateurs de demande qui adapte les demandes du téléphone dans les classes de demande que j'utilise dans le reste de l'application. Ce que fait chaque adaptateur de requête, c'est qu'il accède à un objet dans une session et modifie l'une de ses propriétés. Maintenant, la question: Je veux écrire un test unitaire qui va tester cet adaptateur de requête, mais je n'ai pas de session pendant que j'exécute le test. Est-il possible de créer une session ou quelque chose comme ça pour tester l'adaptateur complet?C#: classes de test d'unité d'application Web

Merci à l'avance

Répondre

5

Qu'est-ce que vous voulez faire est de remplacer directement à l'aide d'une session dans vos adaptateurs. Vous voulez créer quelque chose d'interface comme

public interface ISessionableObject 
{ 
    MyData Data { get; set; } 
} 

puis créer 2 la mise en œuvre des classes similaires à

public class HttpSessionedObject : ISessionableObject 
{ 
    public MyData Data { 
     get { return Session["mydata"]; } 
     set { Session["mydata"] = value; } 
    } 
} 

public class DictionaryObject : ISessionableObject 
{ 
    private readonly Dictionary<string, MyData> _dict = 
            new Dictionary<string, MyData>(); 

    public MyData Data { 
     get { return dict ["mydata"]; } 
     set { dict ["mydata"] = value; } 
    } 
} 

Edit:

Juste Incase vous avez une certaine confusion sur ce qu'il faut faire avec ce , Je suis sûr que vous avez quelque chose comme ça:

public class Adapter 
{ 
    public void DoSomething() 
    { 
     var data = Session["mydata"]; 
     ... 
    } 
} 

Au lieu de cela, vous voulez quelque chose comme ça

public class Adapter 
{ 
    private readonly ISessionableObject _session; 

    public Adapter(ISessionableObject session) 
    { 
     _session = session; 
    } 

    public void DoSomething() 
    { 
     var data = _session.Data; 
     ... 
    } 
} 

Je recommande d'utiliser un cadre d'injection de dépendance comme StructureMap pour gérer la création de vos objets, mais c'est un sujet beaucoup plus sans rapport avec ce allant atleast avec l'injection de dépendance pauvres mans votre code sera similaire à

public class AdapterUser 
{ 
    public void UsingPhone() 
    { 
     var adapter = Adapter(new HttpSessionedObject()); 
     ... 
    } 
} 

Et

[UnitTest] 
public class AdapterUserTest 
{ 

    [Test] 
    public void UsingPhone() 
    { 
     var adapter = Adapter(new DictionaryObject()); 
     ... 
    } 
} 
Questions connexes