簡體   English   中英

在 C# 中編寫 Xunit 測試用例

[英]Writing Xunit test cases in C#

我正在學習編寫單元測試用例,並且正在使用 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 ...
}

}

請注意,使用 web API 並不是單元測試理念的一部分。 單元測試通常被期望獨立於外部交互。

您仍然可以使用 xUnit 執行測試,但您不在 UNIT 測試環境中。 如果您有權訪問服務背后的代碼,則可以在沒有 Web 層的情況下對其進行單元測試。 (例如,您可以直接對 REST controller class 進行單元測試。)

如果您忽略這一點,我認為答案已經在您的問題中。

您可以直接在測試 class 中編寫測試。

public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
    DatabaseFixture fixture;

    public MyDatabaseTests( DatabaseFixture fixture )
    {
        this.fixture = fixture;
    }

    // Write test method here
    [Fact]
    private void MyTestMethod()
    {
        // Prepare Test
        /// Prepare your test data here.

        // Execute Test
        /// Execute your test operation here.

        // Validate Test
        ///  Use Assert methods here.
        /// Assert.True(....);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM