【问题标题】:Unit Testing Advice - how to unit test your .asmx单元测试建议 - 如何对您的 .asmx 进行单元测试
【发布时间】:2010-02-11 20:10:29
【问题描述】:

我即将创建一个将由非 .NET 内部自定义系统使用的 Web 服务。我想要一些关于通过 .asmx 设置测试类和方法的最佳方法的建议(最佳实践、如何测试调用、不该做什么等),特别是在 .NET 3.5 环境中。

我将使用 NUnit 来做这个测试。是否像创建一个测试项目、向其中添加服务然后创建一个测试类和该服务的实例一样简单……然后开始创建您的测试方法?

我需要同时测试 .asmx 和 .asmx.cs 方法(对方法进行单元测试),以便知道我是否将它传递给队友,它会起作用。

也许无法直接测试 .asmx.cs,我只需要通过集成测试进行测试。我想我真正需要的是模拟我的 .asmx。可能是不可能的。

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

    单元测试的最佳实践不是测试 asmx 文件,而是测试 asmx 文件后面的部分(单元)。如果您可以将您的代码拆分成小的独立部分,那么您可以对这些部分进行单元测试。

    如果您想测试 asmx 文件本身,您说的是集成测试。您可以按照您描述的方式使用 NUnit,但这并不是真正的单元测试。

    【讨论】:

    • 我想对 . asmx.cs。所以我的问题还没有解决,因为在我的单元测试项目中,我想我不确定如何调用 .asmx.cs。换句话说,如果我的服务名为 MyService.asmx,我想创建一个单元测试 MyServiceTest,专门测试 .asmx.cs 方法。我需要同时进行测试,就像我是 servcie 的消费者和单元测试一样,以了解我是否在任何 .asmx.cs 方法中遇到任何错误。基本上,重点是我创建了一个内部服务,而我的老板将使用它。刚刚完成了方法。
    • 所以我想我的问题仍然存在。我创建了 MyTestProject 解决方案,并在其中创建了一个包含我的测试类的 C# 项目。然后将 Web 项目添加到相同的解决方案中,并希望测试对 .asmx 的调用并单元测试 .asmx.cs 中的方法
    • 你能把 asmx.cs 中的方法(至少是需要测试的部分)移到一个新的类中并进行测试吗?
    • 如果你真的想测试 asmx(只是不要称它为 Unit 测试),你能做的最好的事情就是在您的 testfixturesetup 中启动 Visual Studio Webdev 服务器(又名 cassini)并在您的测试中调用该服务。
    【解决方案2】:

    您可能错过了其他人所说的重点。 .asmx 文件应该没有值得测试的逻辑。如果它真的只是业务层调用的包装器,那么它不会添加任何内容,也不需要进行测试。如果它确实添加了一些东西,则将其提取出来,直到 .asmx 只包含一个传递调用。

    您的 .asmx 文件包含哪些无法提取到单独的可测试类中的内容?

    【讨论】:

    • 它是带有附加逻辑的包装器,例如日志记录等。它是我的 PayPal 包装器项目的传递,并在那里调用包装器......但包装器并不总是只是通过而不做一些日志记录,更新我们这边的一些记录等等。
    • 我猜我可以提取到单独的类中。我只是将方法复制到某个测试类中,然后将该类添加到我的测试项目中。
    【解决方案3】:

    不幸的是,这是 .asmx Web 服务的问题,它们依赖于 ASP.net,最好的方法是将 .asmx Web 服务保留为存根,并将 Web 服务逻辑提取到一个干净的依赖项中 -取而代之的是免费的课程和单元测试。另一种选择是也运行集成测试。

    从长远来看,如果单元测试对您很重要,您最好使用从一开始就设计有单元测试的web service framework 进行开发。

    【讨论】:

      【解决方案4】:

      就像 Lodewijk 所说,最好不要对 asmx 文件进行单元测试。相反,将该文件中的逻辑提取到处理您所追求的行为的类文件中。这样,您就可以在与 UI 隔离的情况下对这些类进行单元测试。你可能会发现你真正遇到的问题是你的 UI 层有太多的业务逻辑。

      如果您想测试 asmx 文件本身,您可能需要考虑手动测试、集成测试或验收测试……但如果您可以将逻辑移至业务层,您可能会发现它更容易测试。

      【讨论】:

      • 我已经有一个 BL 项目。总之感谢。这些是 BL 调用的包装器。
      猜你喜欢
      • 2012-01-08
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2021-10-07
      相关资源
      最近更新 更多