2010-02-11 150 views
9

我刚刚完成创建将由非.NET内部自定义系统使用的Web服务。我希望在.NET 3.5环境中特别针对通过.asmx设置测试类和方法(最佳实践,如何测试调用,不该做什么等)的最佳方式提供建议。单元测试建议 - 如何单元测试您的.asmx

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

我需要测试两者的.asmx和.asmx.cs方法(单元测试方法),所以我知道如果我通过这它去上班了队友。

也许这是不可能直接测试的.asmx.cs和我就必须通过集成测试来测试。我想我真正需要的是嘲笑我的.asmx。可能不可能。

回答

8

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

如果你想测试asmx文件本身,你正在谈论一个集成测试。您可以按照您所描述的方式使用NUnit,但这不是真正的单元测试。

+0

我想UNIT测试中的方法。 asmx.cs.所以我的问题还没有解决,因为在我的单元测试项目中,我想我不确定如何调用.asmx.cs。换句话说,如果我的服务被称为MyService.asmx,我想创建一个单元测试MyServiceTest,专门测试.asmx.cs方法。我需要同时测试,就好像我是服务器和单元测试的使用者一样,知道是否在任何.asmx.cs方法中出现任何错误。基本上问题是我创建了一个内部服务,我的老板正在利用它。刚刚完成了这些方法。 – PositiveGuy 2010-02-12 01:04:16

+0

所以我想我的问题依然存在。我创建了MyTestProject解决方案,并在其中创建了一个C#项目,该项目将包含我的测试类。然后将Web项目添加到同一个解决方案中,并且想要测试对.asmx的调用,并且单元测试.asmx.cs中的方法 – PositiveGuy 2010-02-12 01:07:28

+0

您可以将方法从asmx.cs移出(至少是需要的部分测试)到一个新的班级和测试? – Davy8 2010-02-12 01:24:41

0

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

如果你想测试ASMX文件本身你要么要考虑手动测试,集成测试或验收测试......但如果你能你的逻辑转移到业务层,你可能会发现它更更容易测试。

+0

我已经有了一个BL项目。不管怎样,谢谢。这些是BL呼叫的包装。 – PositiveGuy 2010-02-12 01:33:26

1

很不幸,这是的.asmx web服务的问题,它们都依赖于ASP.net,你最好的办法是保持的.asmx Web服务作为存根,并提取您的Web服务逻辑到一个干净的依赖而是免费的类和单元测试。另一种选择是运行集成测试。

从长远来看,如果单元测试是对你很重要,你可能会更好用web service framework,其设计从一开始就进行单元测试开发。

3

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

什么是您的.asmx文件包含不能被提取到单独的,可测试的类?

+0

它是包含额外逻辑的包装,如日志记录等。它是传递给我的PayPal包装器项目并在那里调用包装器......但包装器并不总是只通过没有做一些日志记录,更新我们侧面的某些记录等。 – PositiveGuy 2010-02-12 02:14:04

+0

我想我可以提取到单独的课程。我只需将这些方法复制到某个Test类中,然后将该类添加到我的测试项目中。 – PositiveGuy 2010-02-12 02:14:53