单元测试建议 - 如何对你的.asmx进行单元测试

9

我已经快完成一个Web服务,将被一个非.NET内部定制系统使用。我想请教如何在.NET 3.5环境下设置测试类和方法,以及最佳实践,如何测试调用,哪些操作不应该做等。

我将使用NUnit进行测试。是否只需要创建一个测试项目,添加服务,然后创建一个测试类和该服务的实例,就可以开始编写测试方法了呢?

我需要测试.asmx和.asmx.cs方法(单元测试方法),以便知道如果将其传递给团队成员,它将起作用。

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

4个回答

8

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

如果您想要测试asmx文件本身,则需要进行集成测试。您可以使用NUnit进行这样的测试,但这并不是真正的单元测试。


我想对 .asmx.cs 中的方法进行单元测试。所以我的问题还没有解决,因为在我的单元测试项目中,我不确定如何调用 .asmx.cs。换句话说,如果我的服务名为 MyService.asmx,我想创建一个名为 MyServiceTest 的单元测试,专门测试 .asmx.cs 方法。我需要同时进行消费者测试和单元测试,以了解是否在任何 .asmx.cs 方法内出现错误。基本上,我创建了一个内部服务,我的老板将利用它。刚刚完成了这些方法。 - PositiveGuy
所以,我想我的问题仍然存在。我创建了MyTestProject解决方案,其中包含一个将保存我的测试类的C#项目。然后,我将Web项目添加到同一解决方案中,并希望测试对.asmx的调用,并对.asmx.cs中的方法进行单元测试。 - PositiveGuy
你能把asmx.cs中的方法(至少需要测试的部分)移到一个新类中并进行测试吗? - Davy8
如果你真的想测试asmx(<吹毛求疵>只是不要称其为_Unit_测试</吹毛求疵>),最好的方法是在你的testfixturesetup中启动visual studio webdev服务器(又名cassini),并在你的测试中调用服务。 - Lodewijk

3
您可能没有理解其他人的意思。.asmx文件应该没有值得测试的逻辑。如果它真的只是业务层调用的包装器,那么它什么也不添加,也不需要进行测试。如果它确实添加了一些东西,请提取出来,直到.asm x只包含一个穿透式调用。
您的.asm x文件包含什么内容,不能被提取到单独的、可测试的类中?

这是一个带有附加逻辑(如日志记录等)的包装器。它是对我的PayPal包装器项目的透传,并在那里调用包装器...但是包装器并不总是只是简单地透传,而是在我们这边更新某些记录、记录日志等操作。 - PositiveGuy
我想我可以将其提取到单独的类中。然后,我将这些方法复制到某个测试类中,并将该类添加到我的测试项目中。 - PositiveGuy

1

不幸的是,这是与 .asmx web 服务相关的问题,它们依赖于 ASP.net,您最好的方法是将 .asmx web 服务保留为存根,并将您的 web 服务逻辑提取到一个干净的无依赖类中并对其进行单元测试。另一种选择是运行集成测试。

从长远来看,如果单元测试对您很重要,您可能最好使用web service framework,该框架从一开始就设计了单元测试。


0

正如Lodewijk所说,最佳实践是不要对asmx文件进行单元测试。相反,将该文件中的逻辑提取到处理所需行为的类文件中。这样,您就可以从UI中隔离出这些类并进行单元测试。您可能会发现,您真正面临的问题是UI层中有太多的业务逻辑。

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


我已经有一个BL项目了。无论如何,谢谢。这些是BL调用的包装器。 - PositiveGuy

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