Использование Lambdas в качестве ограничений в NUnit 2.5? - PullRequest
10 голосов
/ 14 января 2010

Согласно блогу Чарли Пула NUnit , можно использовать лямбда-выражения в качестве ограничений в NUnit 2.5. Я просто не могу заставить его работать? Я использую NUnit 2.5.3.9345.

Используя пример лямбда из поста в блоге:

[TestFixture]
public class Class1
{
    [Test]
    public void someTest()
    {
        int[] array = {1, 2, 3, 4};
        Assert.That( array, Is.All.Matches( (x) => x%4 == 0 && x%100 != 0 || x%400 == 0 ));
    }
}

Результаты компилятора говорят: "Невозможно преобразовать лямбда-выражение в тип 'NUnit.Framework.Constraints.Constraint', потому что это не тип делегата"

Целевой каркас сборки - .NET Framework 3.5. Что-то я тупо делаю не так?

Ответы [ 3 ]

13 голосов
/ 14 января 2010

Я думаю, что компилятор не может иметь дело с лямбда, потому что он не может определить тип параметра. Попробуйте это:

Assert.That( array, Is.All.Matches( (int x) => x%4 == 0 && x%100 != 0 || x%400 == 0 ));
3 голосов
/ 08 мая 2013

Ограничение Matches имеет 3 перегрузки в используемой версии NUnit (2.5.9), одна из которых

public Constraint Matches<T>(Predicate<T> predicate)

Так что, если вы передадите параметр типа в вызове метода, это может сработать, например:

Assert.That(array, Is.All.Matches<int>(x => (rest of lambda body)));
1 голос
/ 25 марта 2015

Можно определить ограничение для коллекции, тестируя с помощью NUnit Framework версии 2.6.12296, используя Has.All.Matches (somepredicate) .

    [Test]
    [TestCase("1000")]
    public void ListSubOrganizationsFiltersAwayDeprecatedOrganizations(string pasId)
    {
        var request = ListOrganizations2GRequest.Initialize(pasId);

        var unitsNotFiltered = OrganizationWSAgent.ListOrganizations2G(PasSystemTestProvider.PasSystemWhenTesting, request);

        request.ValidPeriod = new ListOrganizations2GRequestValidPeriod { ValidFrom = new DateTime(2015, 3, 24), ValidFromSpecified = true };

        var unitsFiltered = OrganizationWSAgent.ListOrganizations2G(PasSystemTestProvider.PasSystemWhenTesting, request);

        Assert.IsNotNull(unitsNotFiltered);
        Assert.IsNotNull(unitsFiltered);
        CollectionAssert.IsNotEmpty(unitsFiltered.Organization);
        CollectionAssert.IsNotEmpty(unitsNotFiltered.Organization);

        int[] unitIdsFiltered = unitsFiltered.Organization[0].SubsidiaryOrganization.Select(so => so.Id).ToArray();

        var filteredUnits = unitsNotFiltered.Organization[0].SubsidiaryOrganization
            .Where(u => !unitIdsFiltered.Contains(u.Id)).ToList();

        Assert.IsNotNull(filteredUnits);
        CollectionAssert.IsNotEmpty(filteredUnits);
        Assert.That(filteredUnits, Has.All.Matches<OrganizationHierarchySimpleType>(ohs => (!IsValidPeriodForToday(ohs)))); 
    }

    private static bool IsValidPeriodForToday(OrganizationHierarchySimpleType ohs)
    {
        return ohs.ValidPeriod != null
               && ohs.ValidPeriod.ValidFrom <= DateTime.Now && ohs.ValidPeriod.ValidTo >= DateTime.Now;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...