用于集成测试的存根web服务器

Fra*_*man 1 c# iis integration-testing

我有一些集成测试,我想验证某些要求是针对第三个[艺术网络服务器.我以为我会用一个简单记录调用它的存根服务器替换第三方服务器.调用不需要成功,但我确实需要记录所发出的请求(主要是路径+查询字符串).

我正在考虑使用IIS.我可以1)设置一个空站点,2)修改系统的主机文件以将请求重定向到该站点3)在每个测试结束时解析日志文件.

这是有问题的,因为IIS不会立即写入日志文件,并且文件会连续写入.我需要找到文件,在测试前读取内容,在测试后等待不确定的时间,读取更新内容等.

有人会想到更简单的方法吗?

Mor*_*dur 5

您可以使用System.Net.HttpListener(MSDN LINK).

它作为嵌入式WebServer工作,这意味着您甚至可以在不必解析日志文件的情况下即时检查访问.

我最近在我的代码中使用的一个类:

class Listener
{
    private HttpListener listener = null;

    public event EventHandler CommandReceived;

    public Listener()
    {
        this.listener = new HttpListener();
        this.listener.Prefixes.Add("http://localhost:12345/");
    }

    public void ContextReceived(IAsyncResult result)
    {
        if (!this.listener.IsListening)
        {
            return;
        }
        HttpListenerContext context = this.listener.EndGetContext(result);
        this.listener.BeginGetContext(this.ContextReceived, this.listener);

        if (context != null)
        {
            EventHandler handler = this.CommandReceived;
            handler(context, new EventArgs());
        }
    }

    public void Start()
    {
        this.listener.Start();
        this.listener.BeginGetContext(this.ContextReceived, this.listener);
    }

    public void Stop()
    {
        this.listener.Stop();
    }
}
Run Code Online (Sandbox Code Playgroud)