Модульный тест для дерева выражений в 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
, вы можете создать любое количество тестовых случаев для проверки вашего кода