C# 对WCF服务进行单元测试

C# 对WCF服务进行单元测试,c#,wcf,unit-testing,testing,mocking,C#,Wcf,Unit Testing,Testing,Mocking,我正在设计一个企业级web应用程序,它将有一个数据层+SQL数据库,一个与数据层通信的WCF REST web服务层,然后是一个与WCF REST web服务通信的MVC网站。我想在设计的每一个层次上进行自动单元测试 我已经创建了一个数据层单元测试项目fine,它测试EF模型、存储库、操作等,并且有大约15个测试,我可以点击按钮运行,到目前为止,测试数据层提供的所有功能 我希望在WCF服务层也有同样的功能,但我不知道如何让自动测试项目针对WCF服务运行。我看过关于使用WCF测试客户端在后台加载服

我正在设计一个企业级web应用程序,它将有一个数据层+SQL数据库,一个与数据层通信的WCF REST web服务层,然后是一个与WCF REST web服务通信的MVC网站。我想在设计的每一个层次上进行自动单元测试

我已经创建了一个数据层单元测试项目fine,它测试EF模型、存储库、操作等,并且有大约15个测试,我可以点击按钮运行,到目前为止,测试数据层提供的所有功能

我希望在WCF服务层也有同样的功能,但我不知道如何让自动测试项目针对WCF服务运行。我看过关于使用WCF测试客户端在后台加载服务并能够向每个服务方法输入参数并查看结果的文章,但我不希望手动过程,我希望它是自动化的,以模拟数据层并单独测试服务调用。复杂的是,理想情况下,我想测试它的RESTful方面,因此能够模拟GET/POST/PUT/DELETE等,也能够使用错误的方法调用某些方法,并确认它按预期失败,等等


是否有一个自动执行此操作的好解决方案,或者我的做法是错误的?

您确实可以创建可以自动运行的测试来测试WCF服务

请参见此处的讨论:


然而,在测试策略/测试用例设计中,您需要问的一个问题是,有多少REST端点测试需要是单元测试,有多少需要是系统/集成测试的一部分。因为wcf端点(包括REST)将允许您将系统视为一个黑盒,并在不熟悉内部类型的情况下进行系统测试。

您可以将服务地址更改为localhost。
通过这种方式,您可以启动服务并测试它,而无需进行模拟

我写了一篇关于如何做到这一点的文章。您必须将业务逻辑抽象到一个调用真实服务或模拟服务的服务

可能的重复是个坏主意,因为服务(本地或远程)可以对远程数据库进行一些更改,或者连接到其他服务/ESB等。