在 Cosmos db 中添加文档数据会出错,因为资源已经存在

Adding Document data in Cosmos db gives error as resource already exist

我有下面的单元测试用例,我试图在 cosmos Db 中一个一个地添加 JObjects 的列表,但它没有给出错误,因为

Resource with specified id or name already exists

而我的数据库实际上是空的,里面没有任何价值。我在这里做错了什么??

[Fact]
public async Task AddDataInCosmosDbEmulator() 
{
  await ReadConfigAsync();

  var jsonData = await ReadAllData();
  Uri collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, RecordingCollection);

  foreach(var obj in jsonData) 
  {
    Document doc = await client.CreateDocumentAsync(collectionUri, obj);
  }
}

private async Task ReadConfigAsync() 
{
  client = new DocumentClient(new Uri(CosmosEndpoint), EmulatorKey,
    new ConnectionPolicy {
      ConnectionMode = ConnectionMode.Direct,
        ConnectionProtocol = Protocol.Tcp

    });
}

jsonData 是这样的格式:

{{"id":"Test1","Name":"123"}},
{{"id":"Test3","Name":"12r3"}},
{{"id":"Test15","Name":"12we3"}},
{{"id":"Test12","Name":"oi123"}}

一些思考和建议。要确保它不是真正存在的条目,请重写

Document doc = await client.CreateDocumentAsync(collectionUri, obj );

Document doc = await client.UpsertDocumentAsync(collectionUri, obj );

如果可行,则可能是您的本地模拟器已经获取了数据。问题是,当您第二次重新 运行 单元测试时,当您实际执行插入时,这将是一个问题。

检查模拟框架。单元测试应该只测试手头的代码,而不是实际的持久性项目等等?

你会如何在构建服务器上解决这个问题?你会如何管道这个?将实际的集成测试留给集成测试。检查