簡體   English   中英

寫作單元測試

[英]Writing unit test

我需要幫忙 我需要在此源代碼上編寫一些單元測試。 我嘗試編寫它,但是沒有成功。

public class PagedCollection<T> : ReadOnlyCollection<T>, 
IPagedCollection<T>

    {
        public int CurrentPage { get; }
        public int TotalPages { get; }
        public int PageSize { get; }
        public int TotalCount { get; }
        public bool HasPrevious => CurrentPage > 1;
        public bool HasNext => CurrentPage < TotalPages;

        public PagedCollection(ICollection<T> items, int count, int pageNumber, int pageSize) : base(items.ToList())
        {
            EnsureArg.IsGte(count, 0, nameof(count));
            EnsureArg.IsGt(pageNumber, 0, nameof(pageNumber));
            EnsureArg.IsGt(pageSize, 0, nameof(pageSize));

            TotalCount = count;
            CurrentPage = pageNumber;
            PageSize = pageSize;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);
        }
    }
}

誰能幫我嗎?

步驟0是確定對象應執行的操作。 所有這些都成為您的測試案例。 有幾個顯而易見的候選人:

[Test]
public void RejectIfCountIsZero()
{
    ICollection<string> collection = new[] { "Hello", "World" };
    ArgumentOutOfRangeException e = Assert.Throws<ArgumentOutOfRangeException>(() => { new PagedCollection<string>(collection, 0, 1, 1); });
    Assert.That(e.ParamName, Is.EqualTo("count"));
}

等您的其他驗證

您可以測試您的總頁面邏輯

[Test]
public void RoundsUpTotalPagesIfNotDivisible()
{
    ICollection<string> collection = new[] { "Hello", "World" };
    PagedCollection<string> pagedCollection = new PagedCollection<string>(collection, 100, 3, 9);
    Assert.That(pagedCollection.TotalPages, Is.EqualTo(12));
}

然后對計數可除的情況進行一次。 為您的HasPrevious和HasNext屬性添加一個,期望值分別為true和false。 當然,應該由構造函數初始化的屬性也會被初始化。

只需測試您所需的東西,以免將來發生中斷(並刪除不需要的任何代碼)。 遵循模式“安排”,“行為”,“聲明”。 使每個測試獨立於其他測試。 有人在每個測試中說一個斷言,但對此我稍微放松了一些。 絕對要避免通過過程集的測試用例。 如果發現自己需要先在“安排”中調用15個方法,然后再執行“行為”,則說明設計太緊密了。

祝好運。

暫無
暫無

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

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