测试完成后关闭连接

时间:2014-12-08 12:59:00

标签: c# unit-testing httplistener

我想使用单元测试来测试HTTP Listener的功能。但是我很难让它在完成后停止聆听。

    private HttpListener listener = new HttpListener();

    public ListenerTests()
    {
        listener.Start("1234");
    }

    //Test if the listener can respond
    [TestMethod]
    public void TestResponse()
    {
        WebClient client = new WebClient();

        string response = client.DownloadString("http://localhost:1234/");
        Assert.IsNotNull(response);
    }

    //Test if the server can stop without issues
    [TestMethod]
    public void TestStop()
    {
        listener.Stop();
    }

如果我只运行TestStop()测试,那么它将始终停止监听,而在第二次运行时它可以正常工作。如果我同时运行它将第一次正常工作,但第二次测试执行引擎"仍在运行,而端口不可用。

我认为在所有测试之后运行Stop()可以解决问题...但我无法弄清楚如何?

我尝试使用Ordered Tests但是它有各种不同的问题。即使我改变了它上面的端口来监听它,它似乎随机使用我之前选择的一个,然后永远不可用。而且,它远非理想。

2 个答案:

答案 0 :(得分:3)

您可以使用TestCleanupAttribute在测试完成后清理所有内容。

[TestCleanup]
public void TestStop()
{
    listener.Stop();
}

将你的Init放在ClassInitializeAttribute中:

[ClassInitialize]
public void ListenerInit()
{
    listener.Start("1234");
}

MSDN: Unit Testing Framework

答案 1 :(得分:0)

根据Structure of Unit TestsAnatomy of a Unit Test下提供的信息,您应该使用属性ClassCleanUp创建一个清理方法,以便在完成所有测试后停止HttpListener。

除了ClassCleanUp标记之外,您还可以使用ClassInitialize标记正在创建HttpListener的方法,以确保在执行测试之前始终调用HttpListener,从而无需调用你当前的构造函数。