【问题标题】:In ServiceStack, how can I do integration testing with multiple endpoints?在 ServiceStack 中,如何进行多个端点的集成测试?
【发布时间】:2016-04-21 09:36:22
【问题描述】:

我们将 ServiceStack 用于具有多个不同问题域的客户项目,我们希望将它们分开。我们开发了一个测试框架,它启动了一个 AppHostHttpListener 并使用 SQLite 和 DbUp 建立了一个内存中的测试数据库 - 但是,如您所知,测试会话的 AppDomain can only have one AppHost at a time

另一方面,我们要部署两个不同的 AppHost,我们称它们为 FooBarFoo 接受请求并将它们传递给Bar,因此Foo -> Bar,Bar 是独立的。

我们希望能够编写运行FooBar 实例的端到端集成测试。由于 ServiceStack 对每个 AppDomain 一个 AppHost 的限制,我们似乎有以下选择:

  1. 在测试会话中为每个 AppHost 启动一个新的 AppDomain,并跨 MarshallByRef 边界控制它们的生命周期。不过,不确定这将如何在 AppHosts 之间执行共享“测试连接”。
  2. 模拟外部服务。这是教科书式的答案,但这些系统非常关键,我们希望看到对一项服务的更改何时会破坏另一项服务。
  3. 使端点可插入,以便它们可以加载到同一个 AppHost 中进行测试,但在不同的子 URL 下。在我看来,这需要端点共享 AuthFeature、IDbConnectionFactory 等,因此我们将失去这种灵活性。

我的问题是:

  1. 您会选择哪个选项?
  2. 您能否推荐另一种方法,使我们能够测试内存中多个 ServiceStack 端点的集成?

【问题讨论】:

    标签: servicestack integration-testing


    【解决方案1】:

    在内存中测试多个服务的唯一方法是将它们组合在同一个 Test AppHost 中,这将只需要注册集成测试正在测试的依赖项。在内存集成测试中,通常有一个为任务构建的自定义 AppHost,该 AppHost 不是测试的一部分。

    替代方法是使用 IIS Express 并在运行之前启动集成测试中使用的端点实例。

    【讨论】:

    • 嗨,神话!我以前看过你(或其他一些 ServiceStack 怪胎)关于在不同的 AppDomain 中旋转多个 AppHost 的帖子,你现在不提出它是有原因的吗?实际上,我自己也在尝试这个想法,以评估它与 Xunit 的可行性,到目前为止,它似乎很有希望......
    • @Martaver 这是一个选项,但我不建议这样做,因为它比单个 Test AppHost 更难设置,而且它也不是在 IIS Express 上托管实际实例的“完全集成测试”将更具代表性 - 所以我没有看到为不代表生产托管的精品集成测试设置做更多工作的好处。
    • 对于与生产环境的距离,我们也曾有过类似的想法……当然,这有待商榷,但与在内存中进行集成测试相比,您真正想说的是使用 IIS 实例?
    • @Martaver 我们的大多数集成测试都是内存自托管集成测试,每个测试都有一个自定义 AppHost,配置为仅注册集成测试所需的依赖项。这是我们的偏好,它体积小、重点突出、独立且在内存中,并具有出色的调试支持。
    • 好吧,这是有道理的,然后您在“测试主机”容器上配置您可能需要的任何模拟依赖项?您必须为每个测试场景启动不同的应用程序主机,然后 - 速度如何?我们的 AppHostHttpListenerBase 需要大约 2.5 秒才能启动。
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多