Модульный тест для дерева выражений в C#

Как написать модульный тест для дерева выражений в C#.

У меня есть этот класс, который должен быть проверен. Этот метод возвращает дерево выражений, а также получает его в качестве параметра.

код:

public ExpressionStarter<SpecFinderDataModel> DoSearch(bool status, string searchValue, ExpressionStarter<SpecFinderDataModel> predicate)
{
    var localPredicate = predicate;
    if (status == false)
    {
        var searchTerms = searchValue.Split(' ').ToList().ConvertAll(x => x.ToLower());
        localPredicate = localPredicate.Or(s => searchTerms.Any(srch => s.ProductID.ToLower().Contains(srch)));
        localPredicate = localPredicate.Or(s => searchTerms.Any(srch => s.ISBN13.ToLower().Contains(srch)));
        localPredicate = localPredicate.Or(s => searchTerms.Any(srch => s.Title.ToLower().Contains(srch)));
    }
    return localPredicate;
}

Любые советы будут полезны. Благодарю.

Обновление № 1 Я использовал LinqKit для ExpressionStarter

1 ответ

Решение

Это будет просто, хотя я буду использовать Expression<Func<SpecFinderDataModel,bool>> вместо API LinqKit, который используется внутри, в DoSearch метод, вам нужно Expression<Func<SpecFinderDataModel,bool>> в качестве входных данных, основанных на методе, предполагающем следующее в качестве определения типа SpecFinderDataModel

public class SpecFinderDataModel
{
    public string ProductID {get; set;}

    public string ISBN13 {get; set;}

    public string Title {get; set;}
}

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

   // Initial Expression value constant false is the result
   Expression<Func<SpecFinderDataModel, bool>> expr = c => false;

    // SpecFinderDataModel Object
    var sfd = new SpecFinderDataModel
    {
     ISBN13 = "",
     ProductID = "Test A B C",
     Title = ""
    }

    // Call DoSearch and supply the sfd for testing
    var result = DoSearch(false,"Test",expr).Compile()(sfd);

    // Assert the result in the unit test to understand 
    Assert.True(result,true);

Как это основано на комбинациях DoSearch параметры и тестовый объект sfd, вы можете создать любое количество тестовых случаев для проверки вашего кода

Другие вопросы по тегам