gpt4 book ai didi

TeamCity 中的 WCF 集成测试

转载 作者:行者123 更新时间:2023-12-02 03:43:04 24 4
gpt4 key购买 nike

我希望我的集成测试在 TeamCity 中的每次提交上运行。让我的 WCF 服务自动运行以进行测试的好方法是什么?WCF 服务是已测试解决方案的一部分。

目前,我在测试中自行托管该服务。

host = new ServiceHost(typeof(...), url);

但在这种情况下我无法应用实际的 IIS 配置文件。我可以用代码复制设置,但我宁愿不这样做。

持续集成和 WCF 测试的最佳实践是什么?

注意:我见过 WCFStorm 和 SoupUI,但它们是基于 GUI 的应用程序。

最佳答案

我在测试项目中创建一个服务主机类,该服务主机类在测试项目的 AssemblyInitialize 上自行托管我希望调用的服务。

 [TestClass]
internal class ServiceHost
{
private static ServiceHost<Service1> m_Host = null;

/// <summary>
/// Setups the specified context.
/// </summary>
/// <param name="context">The context.</param>
[AssemblyInitialize]
public static void Setup(TestContext context)
{
//comment to run against local consolehost
m_Host = new ServiceHost<Service1>();
m_Host.Open();
}

/// <summary>
/// Tears down.
/// </summary>
[AssemblyCleanup]
public static void TearDown()
{
if (m_Host != null)
{
m_Host.Close();
}
}
}

在测试中我使用 ChannelFactory 来调用服务。然后我关闭 AssemblyCleanup 上的服务。

try
{
ChannelFactory<IService> factory = new ChannelFactory<IService>("User");
IServiceproxy = factory.CreateChannel();
try
{
m_IsAuthenticated = proxy.Method("");
// Make sure to close the proxy
(proxy as IClientChannel).Close();
Assert.IsTrue(m_IsAuthenticated);
}
catch
{
if (proxy != null)
{
// If the proxy cannot close normally or an exception occurred, abort the proxy call
(proxy as IClientChannel).Abort();
}
throw;
}
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}

为测试项目提供其自己的 App.config 文件以及相关设置,以便在托管时与测试环境相关。这为您提供了自动化的黑盒测试。我还使用 Mocks 来隔离我想要测试的服务部分。

关于TeamCity 中的 WCF 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3399791/

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