gpt4 book ai didi

asp.net - 针对测试数据库集成测试 Web 服务

转载 作者:行者123 更新时间:2023-12-02 18:24:14 25 4
gpt4 key购买 nike

我目前正在构建一个 .net Web 应用程序,该应用程序使用 WCF Web 服务来允许 Flex 前端访问数据库。

我正在 Web 服务上设置一些单元/集成样式测试,并试图找出允许测试访问和修改单独测试数据库中的数据的最佳方法。

目前,我的单元测试项目中的连接字符串指向我的测试数据库,而我的 Web 服务项目中的连接字符串则指向我的开发数据库。但是,由于我使用 Linq,当我从测试类调用 Web 服务方法时,它似乎使用开发数据库连接字符串。

我已经研究过创建模拟对象或内存数据库,但我相信会发生同样的问题。

有没有办法让它发挥作用,或者我对我想要的东西的整个想法不正确,在这种情况下有更好的方法来设置它吗?我的项目还处于早期阶段,因此我并不反对显着改变解决方案的架构。

最佳答案

Steven 的建议是取消用于测试的 WCF 管道。这肯定会起作用并测试大部分业务逻辑,但我希望我的自动化集成测试也能测试 WCF 交互。

我已经在我的项目的自动化测试中成功实现了这一目标。

请注意,WCF 客户端和 WCF 主机可以共享同一进程。在这种情况下,它仍然通过 WCF 框架进行调用,但存在所有限制和复杂性。您的 WCF 服务将从您的测试项目的配置文件中获取连接字符串。

为了说明这一点,如果客户端和服务位于同一进程中,配置文件可能如下所示。

<configuration>
<connectionStrings>
<add name="ContractsManager"
providerName="System.Data.SqlClient"
connectionString="Data Source=localhost;Initial Catalog=ContractsManager_AutoTest;Integrated Security=True;Pooling=False;Asynchronous Processing=true;Application Name=CmAutoTests"
/>
</connectionStrings>
<system.serviceModel>

<client>
<endpoint
name="LoggingService"
address="net.tcp://localhost:9612/loggingService"
binding="netTcpBinding"
contract="ContractsManager.ILoginService" />
</client>
<services>
<service name="ContractsManager.LoginServiceImpl">
<endpoint
address="net.tcp://localhost:9612/loggingService"
binding="netTcpBinding"
contract="ContractsManager.ILoginService">
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>

这样,您的自动化测试将发现特定于 WCF 的错误(例如,引发故障契约未指定的异常)。今天我被这个救了:我的代码有一个错误,这意味着 channel 没有正确关闭。由于达到了限制,我的测试一直挂起。我花了一些时间才弄清楚,但我很庆幸这个错误没有进入生产环境。

您的测试套件应在运行第一个测试之前设置服务主机。 (我尝试在每次测试中设置和拆除服务主机,但运行速度太慢)。

祝你好运。

关于asp.net - 针对测试数据库集成测试 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com