ASP.NET应用程序的单元测试配置

3
这是我的第一个Asp.Net Web应用程序测试。我们有一个由几个模块组成的引擎。我需要测试引擎模块中的类。虽然这些类是Asp.Net应用程序的一部分,但它们只包含业务逻辑。
我如何在隔离的情况下测试这些类而不是WebApp的一部分?因为我收到了这个错误:
Web请求'http://localhost:8936/'成功完成,但未运行测试。当配置Web应用程序进行测试失败(处理请求时发生ASP.NET服务器错误)或未执行任何ASP.NET页面(URL可能指向HTML页面、Web服务或目录列表)时,会出现这种情况。在ASP.NET中运行测试需要URL解析到ASP.NET页面,并且页面能够正确执行Load事件。请求的响应存储在文件'WebRequestResponse_BlogManagerBPOConstr.html'中,其中包含测试结果;通常可以使用Web浏览器打开此文件以查看其内容。
谢谢。
编辑:@Mark,这是设计师生成的TestMethod之一。

/

// <summary>
        ///A test for BlogManagerBPO Constructor
        ///</summary>
        // TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example,
        // http://.../Default.aspx). This is necessary for the unit test to be executed on the web server,
        // whether you are testing a page, web service, or a WCF service.
        [TestMethod()]
        [HostType("ASP.NET")]
        [AspNetDevelopmentServerHost("D:\\WorkingCopies\\MyProject\\Engine", "/")]
        [UrlToTest("http://localhost:8936/")]
        public void BlogManagerBPOConstructorTest()
        {
            BlogManagerBPO target = new BlogManagerBPO();
            Assert.Inconclusive("TODO: Implement code to verify target");
        }

你正在使用哪个单元测试框架? - Adam Pope
由微软提供的VS2008附带的单元测试框架是“Microsoft.VisualStudio.QualityTools.UnitTestFramework”。 - Asad
尽管微软可能称其为单元测试,但实际上那并不是一个单元测试。我重新标记了你的问题,以吸引一些略有不同的受众来帮助你解决这个问题。 - Mark Seemann
4个回答

5
您收到的异常信息似乎与单元测试无关。您是否尝试运行 Visual Studio Web 测试套件?

对于单元测试,您应该能够创建业务逻辑类的实例并在没有 ASP.NET 运行时干扰的情况下进行测试。

在 MsTest 中,可能会像这样:

[TestMethod]
public void Test5()
{
    var sut = new Thing();
    var expectedResult = new object();
    sut.Bar = expectedResult;
    var actual = sut.Bar;
    Assert.AreEqual(expectedResult, actual);
}

也许不是最令人兴奋的测试...

没有发现任何ASP.NET特定的内容。

如果您将业务逻辑放在单独的库中并确保它不引用System.Web等内容,则可以最好地确保这一点。


我曾手动编写测试,使用 NUnit 进行测试,并能够成功地在外部 NUnit IDE 中运行。我试图利用 Microsoft 在 VS2008 中提供的“UnitTestFramework”和内置测试环境进行实践和集成。 - Asad
如果你想以 NUnit 风格编写测试,你也可以使用 MSTest。只需不要使用他们所有糟糕的向导,而是创建一个新的测试项目,并开始向项目添加新的单元测试即可。 - Mark Seemann
还有一件事,我目前正在使用NUnit中的“断言”(Assertions)。 我确实需要“模拟”对象来测试许多方法。我该如何创建模拟对象? - Asad
1
请看这里:https://dev59.com/TXI-5IYBdhLWcg3wtaxq#1720654 - Mark Seemann
谢谢,与Moq相处得很好。 - Asad

2
将属性UrlToTest设置为测试中的URL。例如:
[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("C:\\xx\\xx\\Documents\\Visual Studio 2010\\Projects\\xx\\xx", "/")]
[UrlToTest("http://localhost:xxx/examples.aspx")]
[DeploymentItem("examples.dll")]

1

就像Mark所说的那样,去掉这个:
[HostType("ASP.NET")] [AspNetDevelopmentServerHost("C:\xx\xx\Documents\Visual Studio 2010\Projects\xx\xx", "/")] [UrlToTest("http://localhost:xxx/examples.aspx")] [DeploymentItem("examples.dll")] 我曾试图将它用于MVC项目,但直到去掉它后才使其通过测试。


0

只需检查您是否已将 app.config 添加到测试项目中,并且它具有来自 WebService 项目的 web.config 的必要设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接