EventStore与内存中节点的集成测试

时间:2018-12-09 02:04:24

标签: c# asp.net-core integration-testing in-memory event-store

我想使用www.eventstore.org编写一些集成测试,以测试我能够序列化某些域事件并将其附加到流中,然后检索它们并反序列化,等等。

我一直在尝试找到人们通常是如何做到的,并且我读到了格雷格·杨(Greg Young)关于不同方法的答案(有点过时):

  1. 每次执行集成测试时,我都可以生成不同的流,但是我不愿意这样做,也不用测试数据污染事件存储
  2. 我可以使用内存中的事件存储。

第二个选项似乎很理想,因为我可以简单地运行一个干净的事件存储,运行测试并最终停止服务器,以便所有数据都消失了。

我已经看到可以使用参数--mem-db运行事件存储服务器而不将任何内容持久存储在磁盘中。

问题是:如果运行集成测试的操作系统很可能没有运行事件存储二进制文件,因此在运行集成测试的情况下如何使用内存中的事件存储,因此没有真正的事件存储服务器可以在内存中运行?我不希望我的测试失败是因为没有安装任何事件存储,并且没有在执行测试的计算机上运行它。

我知道市场上的某些数据库具有一些nuGet软件包,该软件包包含生产中使用的同一数据库引擎,但作为内存数据库,因此机器上不需要“真实”服务器即可运行测试。所有二进制文件都在该项目可用的dll中。

我试图找到一些关于事件存储是否可用的答案。我读了一些谈论某些嵌入式客户端API的人的评论,但是我发现的文档不是很清楚。其他评论提到了一个叫做MiniNode的东西,但是,线程又承担了太多的责任,还没有找到关于它的含义或如何用于测试的清晰描述。

总而言之,有人可以提供一个集成测试的示例(如果可能的话,为xUnit),其中IEventStoreConnection使用的是内存事件存储,而根本没有安装事件存储?

更新1 :我尝试添加nuGet依赖项https://www.nuget.org/packages/EventStore.Client.Embedded来处理它,以防万一这是我需要的。但是它不支持DotNetCore(标准2.0),所以我不能说。然后我读到以下内容:https://github.com/EventStore/ClientAPI.NetCore/issues/18,其中有人建议采用另一种测试方法,即使用Chocolatey获取事件存储,然后从EventStore.ClusterNode代码执行(我可以使用{{1 }}标志)。我不确定我是否喜欢那样,至少不超过使用Docker达到相同的目的。我仍然想知道是否还有其他选择?

更新2 由于我使用的是gitlab,因此我通过启动一个事件存储服务(容器)来运行事件存储的集成测试,该服务将在“持续集成”步骤结束时终止。 >

--mem-db

这还不能回答我的问题,但这是我需要的解决方案。

0 个答案:

没有答案