Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用内存节点进行EventStore集成测试_C#_Asp.net Core_Integration Testing_In Memory_Eventstoredb - Fatal编程技术网

C# 使用内存节点进行EventStore集成测试

C# 使用内存节点进行EventStore集成测试,c#,asp.net-core,integration-testing,in-memory,eventstoredb,C#,Asp.net Core,Integration Testing,In Memory,Eventstoredb,我想使用www.eventstore.org编写一些集成测试,以测试我是否能够序列化一些域事件并将它们附加到流,检索它们并反序列化它们,等等 我一直在试图找到人们通常是如何做到这一点的,我读到了一些格雷格·杨关于不同方法的回答(有点过时): 我可以在每次执行集成测试时生成不同的流,但我不希望这样做,也不希望用测试数据污染事件存储 我可以使用内存中的事件存储 第二个选项似乎很理想,因为我可以简单地运行一个干净的事件存储,运行测试,并在最后停止服务器,以便所有数据都消失 我已经看到,可以使用参数--

我想使用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的信息。