【问题标题】:Unit test throwing an exception while connecting to asp.net web service连接到 asp.net Web 服务时单元测试引发异常
【发布时间】:2012-02-01 15:01:45
【问题描述】:

我创建了一个单元测试来测试我是否可以登录到我的 ASP.NET Web 服务。 Web 服务工作正常,甚至登录过程。

但是,当尝试通过我的测试连接到它时,它给了我一个错误:

指定的 URL ('http://www.foo.com/') 不对应 一个有效的目录。在 IIS 中配置为在 ASP.NET 中运行的测试需要 URL 存在的有效目录。

我正在通过 Visual Studio 运行我的 Web 服务,因为该项目仍在开发中。

这是我的测试代码:

[TestMethod()]
        [HostType("ASP.NET")]
        [UrlToTest("http://www.foo.com/")]
        public void Login_Test_It_Fails_If_GUID_IS_Wrong()
        {
            //Arrange
            Service service = new Service(); 
            string pGUID = string.Empty; 
            string connectionSQL = @"XXXXXXXXXX";
            bool targetOutput = false;

            //Act
            targetOutput = service.Login(pGUID, connectionSQL);

            //Assert
            Assert.IsFalse(targetOutput);
        }

提前致谢。

【问题讨论】:

  • 如果它连接到 Web 服务,它不是单元测试,而是集成测试。如果您只是测试 Login 方法的逻辑,您应该将逻辑提取到另一个类(您可以将其注入到服务中)并对该类进行单元测试而不实例化服务。
  • 单元测试真的应该做集成测试吗?
  • 是的,你是对的,不应该,我对单元测试/集成测试很陌生,实际上这是我的第一次实验。尽管我从未真正实现过任何测试用例,但我对理论很熟悉。但是,假设这是一个集成测试。为什么它不起作用?
  • 我不知道。我怀疑它是安全性(因为单元测试通常在它们自己的目录和线程中运行)或网络设置。如果你把它指向本地主机,它会工作吗?

标签: c# .net web-services integration-testing


【解决方案1】:

您正在此处进行集成测试,因为您正在测试您的应用程序是否可以与外部依赖项进行通信。

如果您想进行单元测试,您可能想探索一种不同的方法。

  1. 如果 Web 服务是您控制的,您可以为服务本身编写测试以确认其登录身份验证逻辑。

  2. 对于您的消费应用程序,您可以根据服务的mock 编写单元测试,以确保您的应用程序在收到来自服务的响应时表现出正确的行为。

另一方面,将要使用的连接字符串传递给服务似乎是一个糟糕的设计。为什么调用应用程序需要知道服务应该使用什么数据库?

【讨论】:

  • 嗯 ...我会更多地研究集成测试。关于连接字符串,这是我看到这个设计的第一件事,但是这样我们可以控制如果有多个数据库,客户端可以连接到哪个数据库。 (长话短说)
【解决方案2】:

在 ASP.NET 中运行测试需要 URL 解析为 ASP.NET 页面,并且该页面在 Load 事件之前正确执行。
测试方法由页面加载事件调用。因此,您可以创建一个空白的 aspx 页面,并设置 UrlToTest 属性来挂钩它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2011-02-03
    相关资源
    最近更新 更多