【发布时间】:2021-05-05 06:59:54
【问题描述】:
我正在学习编写单元测试用例,我正在使用 Xunit 框架。我有一个场景,我想编写一个测试用例来测试我的 cosmos db 模拟器中的不同场景。为此,我正在尝试创建一个数据库、容器并在我的 cosmos db 模拟器中插入少量测试数据,然后编写我的事实并在测试用例完成后将其删除……以下是我从互联网上找到的代码,想知道我做的是否正确......以及我可以从哪里开始编写我的测试用例。
namespace Project.Tests
{
public class DatabaseFixture : IDisposable
{
private static readonly string CosmosEndpoint = "https://localhost:8081";
private static readonly string EmulatorKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
private static readonly string DatabaseId = "Recordings";
private static readonly string RecordingCollection = "testdata";
public DatabaseFixture()
{
var client = new DocumentClient( new Uri( CosmosEndpoint ), EmulatorKey,
new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
} );
var databaseCreationResult = client.CreateDatabaseAsync( new Database { Id = DatabaseId } ).Result;
var collectionCreationResult = client.CreateDocumentCollectionAsync( UriFactory.CreateDatabaseUri( DatabaseId ),
new DocumentCollection { Id = RecordingCollection } ).Result;
var recData = new Recordings { Id = "Test" };
var itemResult = client
.CreateDocumentAsync(
UriFactory.CreateDocumentCollectionUri( DatabaseId, RecordingCollection ), recData )
.Result;
var document = client
.ReadDocumentAsync(
UriFactory.CreateDocumentUri( DatabaseId, RecordingCollection, itemResult.Resource.Id ) )
.Result;
Recordings site = (dynamic)document.Resource;
}
public void Dispose()
{
// ... clean up test data from the database ...
throw new NotImplementedException();
}
}
public class Recordings
{
public string Id { get; set; }
}
public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
DatabaseFixture fixture;
public MyDatabaseTests( DatabaseFixture fixture )
{
this.fixture = fixture;
}
// ... write tests, using fixture.Db to get access to the database server ...
}
}
【问题讨论】:
-
不过,这并不完全是一个 unit 测试。 你想在这里测试什么? cosmos db模拟器是否有效?
-
如果你只是想开始学习如何编写测试,从最简单的任务开始,你可以想出。数据库端到端/集成测试肯定不是。从一个没有依赖或副作用的简单函数开始。
-
我正在尝试在我的 cosmos db 模拟器中插入数据,并有不同的测试场景,我想用插入的数据进行测试。
-
所以在一行中我想编写单元测试用例,我在模拟器中初始化和创建我的数据库并插入数据,然后开始编写我的事实,然后一旦完成我就可以删除这个数据库。
-
但是假设我的数据库和容器已经在 Cosmos 模拟器中创建,你能告诉我我可以从哪里开始调用 db 和 conatiner 并插入数据并开始编写我的事实
标签: c# azure-cosmosdb xunit.net