2009-10-07 2 views
3

Я работаю над приложением веб-сервера, которое обрабатывает запросы, полученные с мобильных телефонов. У меня есть адаптеры запросов, которые адаптируют запросы от телефона в классах запросов, которые я использую в остальной части приложения. Что каждый адаптер запроса делает, так это то, что он обращается к одному объекту в сеансе и изменяет одно из своих свойств. Теперь вопрос: я хочу написать единичный тест, который будет проверять этот адаптер запроса, но у меня нет сеанса, пока я выполняю тест. Есть ли способ создать сеанс или что-то подобное для тестирования полного адаптера?C#: классы тестирования модулей веб-приложения

Заранее спасибо

ответ

5

То, что вы хотите сделать, это заменить непосредственно с помощью сеанса в адаптерах. Вы хотите создать интерфейс что-то вроде

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

, а затем создать 2 реализующие классы, аналогичные

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:

Только упаковывают Вас есть некоторая путаница, что делать с этим , Я уверен, что у вас есть что-то вроде этого:

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

Вместо этого вы хотите что-то вроде этого

public class Adapter 
{ 
    private readonly ISessionableObject _session; 

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

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

Я бы рекомендовал использовать Dependency Injection Framework как StructureMap для обработки создания ваших объектов, но это гораздо больше, тема не связана с этим, так по крайней мере идти с инъекцией зависимости бедных укомплектовывают ваш код будет похож на

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

И

[UnitTest] 
public class AdapterUserTest 
{ 

    [Test] 
    public void UsingPhone() 
    { 
     var adapter = Adapter(new DictionaryObject()); 
     ... 
    } 
} 
Смежные вопросы