测试列表结果

Testing Lists Results

我正在使用 NLog 和 NSubstitute 创建单元测试。

我在 API 控制器中有这个方法:

    public GenericListItems<CalendarYearItem> GetYears(int startingYear = 0,  int rangeYears = 50, int startIndex = 0, int itemCount = 4)
    {
        if (startingYear == 0)
        {
            startingYear = DateTime.Now.Year;
        }

        List<CalendarYearItem> years = Enumerable.Range(startingYear, rangeYears).Select(x => new CalendarYearItem(x++)).ToList();
        if (years != null)
        {
            int firstIndex = 0;
            int totalCount = years.Count;
            years = PaginateList(years, startIndex, itemCount, totalCount, firstIndex);
            return new GenericListItems<CalendarYearItem>(years, firstIndex, totalCount);
        }
        return new GenericListItems<CalendarYearItem>();
    }

还有这个界面:

    /// <summary>
    /// Get Years
    /// </summary>
    /// <returns>List Months</returns>
    GenericListItems<CalendarYearItem> GetYears(int startingYear, int rangeYears, int startIndex = 0, int itemCount = 4);

如果return 总计数为 50,我需要在调用此方法时进行测试; 如果起始年份为 0,则验证第一个位置是否为 2018 年;

   [Test]
    [TestCase(0, 50)]
    public void GetYears_GetCalendarListYearWithEmptyYear_ReturnCalendarListYearsStartingCurrentYear(int startingYear, int rangeYears)
    {
        GenericListItems<CalendarYearItem> calendar = new GenericListItems<CalendarYearItem>();

        _substitute.GetYears(startingYear, rangeYears);

        Assert.That(calendar.TotalCount, Is.EqualTo(50));
        //var result = _substitute.GetFullDate(year, month, day).Returns(calendar);
        //Assert.AreEqual(calendar, result);
    }

Instead Assert 我需要使用 Collections Assert? 但是当创建安排时我必须复制我的 linq 查询来创建?

Nunit 支持集合断言。但是,您的问题对我来说并不清楚。你究竟想测试什么?

如果你想测试你的实现 returns 50 个元素,你不应该使用模拟,而应该使用你的实现的对象,否则你正在为 nsubstitute 编写测试。如果您正在尝试测试列表生成器的实现,我期待这样的测试。

    [Test]
    [TestCase(0, 50)]
    public void GetYears_GetCalendarListYearWithEmptyYear_ReturnCalendarListYearsStartingCurrentYear(int startingYear, int rangeYears)
    {
        var sut = new InstanceOfYourCalculator();

        GenericListItems<CalendarYearItem> calendar = sut.GetYears(startingYear, rangeYears);

        Assert.That(calendar, Has.Count.EqualTo(rangeYears));

        var expectedResult = Enumerable.Range(DateTime.Now.Year, rangeYears).Select(x => new CalendarYearItem(x++)).ToList();
        CollectionAssert.AreEqual(expectedResult, calendar);
    }

您说您正在使用 NSubtsitute,在我看来,您正在创建一个 returns 空列表的模拟。最重要的是,您没有在测试中使用您的模拟,您只是在初始化它。如果您不清楚,请查看 nsubstitute 的教程。 http://nsubstitute.github.io/help/getting-started/