Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接到asp.net web服务时引发异常的单元测试_C#_.net_Web Services_Integration Testing - Fatal编程技术网

C# 连接到asp.net web服务时引发异常的单元测试

C# 连接到asp.net web服务时引发异常的单元测试,c#,.net,web-services,integration-testing,C#,.net,Web Services,Integration Testing,我创建了一个单元测试来测试我是否可以登录到我的ASP.NET web服务。web服务工作正常,甚至登录过程也正常 但是,当尝试通过我的测试连接到它时,它会给我一个错误: 指定的URL('http://www.foo.com/“)不符合 有效的目录。配置为在IIS中的ASP.NET中运行的测试需要 URL存在的有效目录 我正在通过VisualStudio运行我的web服务,因为该项目仍在开发中 这是我的测试代码: [TestMethod()] [HostType("ASP.NET"

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

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

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

我正在通过VisualStudio运行我的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服务是由您控制的,则可以为服务本身编写测试,以确认其登录身份验证逻辑

  • 对于您的消费应用程序,您可以基于服务的模拟编写单元测试,以确保您的应用程序在收到服务的响应时表现出正确的行为


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

    在ASP.NET中运行测试需要URL解析到ASP.NET页面,并且页面在加载事件之前正确执行。

    测试方法由页面加载事件调用。因此,您可以创建一个空白的aspx页面,并将UrlToTest属性设置为钩住它。

    如果它连接到一个web服务,那么它不是一个单元测试,而是一个集成测试。如果您只是测试登录方法的逻辑,那么您应该将逻辑提取到另一个类(您可以将其注入到服务中),并在不实例化服务的情况下对该类进行单元测试。单元测试真的应该进行集成测试吗?是的,不应该,我对单元测试/集成测试非常陌生,实际上这是我的第一次实验。虽然我从未实际实现过任何测试用例,但我对这个理论很熟悉。但是,假设这是一个集成测试。为什么不起作用?我不知道。我怀疑是安全性(因为单元测试通常在它们自己的目录和线程中运行)还是网络设置。如果你把它指向本地主机,它能工作吗?嗯。。。然后,我将进一步研究集成测试。关于连接字符串,这是我在看到这个设计时说的第一句话,但是通过这种方式,如果有多个数据库,我们可以控制客户端可以连接到哪个数据库。(长话短说)