我看过一些帖子,例如this,但它没有回答我的问题。
基本上我已经使用 LINQKIT 来构建一个如下所示的表达式:
public Expression<Func<uv_Manifest, bool>> CreateManifestFilters(ManifestFilterItem filterItem)
{
var predicate = PredicateBuilder.New<uv_Manifest>;
if(!string.IsNullorWhiteSpace(filterItem.CID)){
predicate = predicate.And(x => x.CID == filterItem.CID && x.CID != null);
}
return predicate;
}
我有一个看起来像这样的单元测试:
[TestMethod()]
public void CreateManifestFilters_FunctionHitWithCIDPopulated_ExpressionWillContainWhereOnCID()
{
var filterItem = new ManifestFilterItem("002");
var predicate = PredicateBuilder.New<uv_Manifest>.And(x => x.CID == filterItem.CID && x.CID != null);
var result = _iManifestManager.CreateManifestFilters(filterItem);
var manifest = new uv_Manifest();
Assert.AreEqual(predicate, result);
}
我要做的是检查表达式是否在属性 CID 上执行位置。但是,当测试失败时出现此错误:
Assert.AreEqual 失败。预期:((CompareString(x.CID, value(FSVendor_Refactored.Tests.ManifestFixture+_Closure$__11-0).$VB$Local_filterItem.CID, False) == 0) AndAlso (Convert(x.CID) != null) )>。实际: ((CompareString(x.CID, value(FSVendor_RefactoredRepository.ManifestManager+_Closure$__2-0).$VB$Local_filterItem.CID, False) == 0) AndAlso (Convert(x.CID) != null))> .
我想我理解它为什么会失败,单元测试和 CreateManifestFilters 函数都在不同的项目中。所以我相信这会导致测试失败。
任何人都知道如何检查表达式以检查它是否在 CID 属性上的位置?
编辑:这不是重复的,因为其他答案不使用 PredicateBuilder 因此链接的答案不符合我的要求。