在 ServiceStack 中,如何对多个端点进行集成测试?
In ServiceStack, how can I do integration testing with multiple endpoints?
我们将 ServiceStack 用于具有多个不同问题域的客户项目,我们希望将它们分开。我们已经开发了一个测试框架,它可以启动 AppHostHttpListener 并使用 SQLite 和 DbUp 设置内存中的测试数据库 - 但是,如您所知,测试会话的 AppDomain can only have one AppHost at a time.
另一方面,我们要部署两个不同的 AppHost,我们称它们为 Foo
和 Bar
。 Foo
接受请求并将它们传递给 Bar
,因此 Foo -> Bar
,并且 Bar 是独立的。
我们希望能够编写端到端的集成测试来执行 Foo
和 Bar
的实例。由于 ServiceStack 对每个 AppDomain 一个 AppHost 的限制,我们似乎有以下选择:
- 在测试会话中为每个 AppHost 启动一个新的 AppDomain,并跨 MarshallByRef 边界控制它们的生命周期。不过不确定这将如何在 AppHost 之间执行共享 'test connections'。
- 模拟外部服务。这是教科书式的答案,但这些系统非常重要,我们希望看到对一项服务的更改何时会破坏另一项服务。
- 使端点可插入 以便它们可以加载到同一个 AppHost 中进行测试,但在不同的子 URL 下。在我看来,这将需要端点共享 AuthFeature、IDbConnectionFactory 等,因此我们将失去这种灵活性。
我想问你的问题是:
- 你会选择哪个选项?
- 您能否推荐另一种方法,使我们能够测试内存中多个 ServiceStack 端点的集成?
在内存中测试多个服务的唯一方法是将它们组合在同一个测试应用程序主机中,这只需要注册集成测试正在测试的依赖项。在内存集成测试中,通常会为任务构建自定义 AppHost,AppHost 不是测试的一部分。
替代方法是使用 IIS Express 并在 运行 之前启动集成测试中使用的端点实例。
我们将 ServiceStack 用于具有多个不同问题域的客户项目,我们希望将它们分开。我们已经开发了一个测试框架,它可以启动 AppHostHttpListener 并使用 SQLite 和 DbUp 设置内存中的测试数据库 - 但是,如您所知,测试会话的 AppDomain can only have one AppHost at a time.
另一方面,我们要部署两个不同的 AppHost,我们称它们为 Foo
和 Bar
。 Foo
接受请求并将它们传递给 Bar
,因此 Foo -> Bar
,并且 Bar 是独立的。
我们希望能够编写端到端的集成测试来执行 Foo
和 Bar
的实例。由于 ServiceStack 对每个 AppDomain 一个 AppHost 的限制,我们似乎有以下选择:
- 在测试会话中为每个 AppHost 启动一个新的 AppDomain,并跨 MarshallByRef 边界控制它们的生命周期。不过不确定这将如何在 AppHost 之间执行共享 'test connections'。
- 模拟外部服务。这是教科书式的答案,但这些系统非常重要,我们希望看到对一项服务的更改何时会破坏另一项服务。
- 使端点可插入 以便它们可以加载到同一个 AppHost 中进行测试,但在不同的子 URL 下。在我看来,这将需要端点共享 AuthFeature、IDbConnectionFactory 等,因此我们将失去这种灵活性。
我想问你的问题是:
- 你会选择哪个选项?
- 您能否推荐另一种方法,使我们能够测试内存中多个 ServiceStack 端点的集成?
在内存中测试多个服务的唯一方法是将它们组合在同一个测试应用程序主机中,这只需要注册集成测试正在测试的依赖项。在内存集成测试中,通常会为任务构建自定义 AppHost,AppHost 不是测试的一部分。
替代方法是使用 IIS Express 并在 运行 之前启动集成测试中使用的端点实例。