C# 使用内存节点进行EventStore集成测试
我想使用www.eventstore.org编写一些集成测试,以测试我是否能够序列化一些域事件并将它们附加到流,检索它们并反序列化它们,等等 我一直在试图找到人们通常是如何做到这一点的,我读到了一些格雷格·杨关于不同方法的回答(有点过时):C# 使用内存节点进行EventStore集成测试,c#,asp.net-core,integration-testing,in-memory,eventstoredb,C#,Asp.net Core,Integration Testing,In Memory,Eventstoredb,我想使用www.eventstore.org编写一些集成测试,以测试我是否能够序列化一些域事件并将它们附加到流,检索它们并反序列化它们,等等 我一直在试图找到人们通常是如何做到这一点的,我读到了一些格雷格·杨关于不同方法的回答(有点过时): 我可以在每次执行集成测试时生成不同的流,但我不希望这样做,也不希望用测试数据污染事件存储 我可以使用内存中的事件存储 第二个选项似乎很理想,因为我可以简单地运行一个干净的事件存储,运行测试,并在最后停止服务器,以便所有数据都消失 我已经看到,可以使用参数--
--mem db
运行事件存储服务器,而不在磁盘中保存任何内容
问题是:如果运行集成测试的操作系统很可能没有安装事件存储二进制文件,因此没有真正的事件存储服务器在内存中运行,那么在运行集成测试时如何使用内存中的事件存储?我不希望我的测试失败仅仅因为执行测试的机器上没有安装、启动和运行事件存储
我知道市场上的一些数据库有一些nuGet包,其中包含与生产中使用的相同的DB引擎,但作为内存中的DB,因此机器上不需要“真正的”服务器来运行测试。所有二进制文件都位于可用于项目的DLL中
我试图找到一些关于事件商店是否提供类似的东西的答案。我读了一些关于一些嵌入式客户端API的评论,但是我发现文档不是很清楚。其他评论提到了一个叫做MiniNode的东西,但是,同样,线程假设太多,并且还没有找到一个关于什么或者如何用于测试的清晰描述
总之,有谁能提供一个集成测试的例子(如果可能的话是xUnit),其中IEventStoreConnection
使用的是内存中的事件存储,而根本没有安装事件存储
更新1:我尝试添加nuGet依赖项来使用它,以防它是我所需要的。但它不支持DotNetCore(标准2.0),所以我说不上来。然后我读了这篇文章,其中有人建议使用一种不同的测试方法,即使用chocolate抓取EventStore
,然后从代码中执行EventStore.ClusterNode
(我会使用--mem db
标志)。我不确定我是否喜欢这样,至少不比出于同样的目的使用Docker更合适。我还在想是否还有其他选择
更新2因为我使用的是gitlab,所以我通过旋转事件存储服务(容器)来运行与事件存储的集成测试,该服务将在持续集成步骤结束时立即终止
integration-tests:
image: my-images-repo/my-gitlab-runner-dotnet-core:latest
stage: integration-tests
services:
# add event store service
- eventstore/eventstore:release-4.1.1-hotfix1
variables:
# event store service params testing with standard ports
EVENTSTORE_INT_TCP_PORT: "1113"
EVENTSTORE_EXT_TCP_PORT: "1113"
EVENTSTORE_INT_HTTP_PORT: "2113"
EVENTSTORE_EXT_HTTP_PORT: "2113"
EVENTSTORE_EXT_HTTP_PREFIXES: "http://*:2113/"
script:
- dotnet restore --no-cache --force
- dotnet build --configuration Release
- dotnet vstest *IntegrationTests/bin/Release/**/*IntegrationTests.dll
这还没有回答我的问题,但它是一个解决我的需要
更新3:(2019年6月21日)netstandard 2.0中仍然不支持嵌入式客户端,因此我无法使用它启动内存中节点进行测试。然而,使用docker还有另外一个选项
此外,EventStore C#API现在也在nuGet中(目前为5.0.1)我仍然有兴趣了解更多关于Update1的信息。