确保服务连接

时间:2011-06-14 23:43:34

标签: c# wcf unit-testing nunit connectivity

我打算设置一个非常简单的 NUnit测试,只测试,如果WCF服务已启动并且正在运行。 所以,我有

http://abc-efg/xyz.svc

现在,我需要编写一个单元测试来连接到这个URI,如果它正常工作,只需记录成功,如果失败则记录文件中的失败和异常/错误。没有必要单独托管等。

调用和实现这一目标的理想方法和方法是什么?

4 个答案:

答案 0 :(得分:3)

不确定这是否理想,但如果我理解您的问题,您真的在寻找集成测试以确保某个URI可用。您并不是真的想要对服务的实现进行单元测试 - 您希望向URI发出请求并检查响应。

这是我设置的NUnit TestFixture来运行它。请注意,这个很快就组合在一起,绝对可以改进....

我使用WebRequest对象发出请求并获取响应。当发出请求时,它被包装在try...catch中,因为如果请求返回除200类型响应之外的任何内容,它将抛出WebException。所以我捕获异常并从异常的WebResponse属性中获取Response对象。我在那时设置了StatusCode变量并继续评估返回的值。

希望这会有所帮助。如果我误解了你的问题,请告诉我,我会相应更新。祝你好运!

测试代码:

[TestFixture]
public class WebRequestTests : AssertionHelper
{
    [TestCase("http://www.cnn.com", 200)]
    [TestCase("http://www.foobar.com", 403)]
    [TestCase("http://www.cnn.com/xyz.htm", 404)]
    public void when_i_request_a_url_i_should_get_the_appropriate_response_statuscode_returned(string url, int expectedStatusCode)
    {
        var webReq = (HttpWebRequest)WebRequest.Create(url);
        webReq.Method = "GET";
        HttpWebResponse webResp;
        try
        {
            webResp = (HttpWebResponse)webReq.GetResponse();

            //log a success in a file
        }
        catch (WebException wexc)
        {
            webResp = (HttpWebResponse)wexc.Response;

            //log the wexc.Status and other properties that you want in a file
        }

        HttpStatusCode statusCode = webResp.StatusCode;
        var answer = webResp.GetResponseStream();
        var result = string.Empty;

        if (answer != null)
        {
            using (var tempStream = new StreamReader(answer))
            {
                result = tempStream.ReadToEnd();
            }
        }

        Expect(result.Length, Is.GreaterThan(0), "result was empty");
        Expect(((int)statusCode), Is.EqualTo(expectedStatusCode), "status code not correct");
    }
}

答案 1 :(得分:3)

这是我们在连接到WCF服务器的测试中使用的。我们没有明确地测试服务器是否已启动,但显然如果不是,那么我们会收到错误:

[Test]
public void TestServerIsUp()
{
    var factory = new ChannelFactory<IMyServiceInterface> (configSectionName);
    factory.Open ();
    return factory.CreateChannel ();
}

如果在配置中指定的端点没有端点侦听,那么您将获得异常和失败的测试。

您可以使用ChannelFactory构造函数的其他重载之一来传递固定的绑定和端点地址,而不是使用config。如果需要。

答案 2 :(得分:1)

您可以使用Visual Studio中的单元测试功能来执行此操作。这是一个例子

http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html

答案 3 :(得分:0)

WCF and Unit Testing example with Nunit

Here也是一个类似的问题。