繁体   English   中英

C#:Web应用程序的单元测试类

[英]C#: Unit testing classes of web application

我正在研究处理从手机接收的请求的Web服务器应用程序。 我有请求适配器,它适应我在应用程序其余部分使用的请求类中的电话请求。 每个请求适配器的作用是它访问会话中的一个对象并更改其中一个属性。 现在,问题是:我想编写一个测试此请求适配器的单元测试,但是在执行测试时我没有会话。 有什么方法可以创建一个会话或类似的东西来测试完整的适配器?

提前致谢

您要做的是直接使用适配器中的会话替换。 你想创建一个类似的界面

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

编辑:

只是因为你对这件事有什么困惑,我相信你有这样的事情:

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

我建议使用像StructureMap这样的依赖注入框架来处理对象的创建,但这是一个与此无关的大得多的主题,所以至少与糟糕的mans依赖注入一样,你的代码将类似于

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

[UnitTest]
public class AdapterUserTest
{

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM