网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System;
using System.Linq;
using System.Linq.Expressions;
using Dpz.Core.Infrastructure.ExpressTreeQuery;
using NUnit.Framework;

namespace Dpz.Core.Simple.Test;

public class GenerateExpressionTest
{
    // 测试用的请求类
    private class TestRequest
    {
        [QueryFilter(FilterCondition.NotNull)]
        public string? Name { get; set; }

        [QueryFilter(FilterCondition.EqualValue)]
        public int Age { get; set; }

        [QueryFilter(FilterCondition.NotNullOrEmpty)]
        public string? Description { get; set; }

        [QueryFilter(FilterCondition.GtValue)]
        public decimal Price { get; set; }
    }

    // 测试用的实体类
    private class TestEntity
    {
        public string? Name { get; set; }
        public int Age { get; set; }
        public string? Description { get; set; }
        public decimal Price { get; set; }
    }

    [Test]
    public void GenerateConditionExpressionTree_WithNullValues_ShouldReturnTrue()
    {
        // Arrange
        var request = new TestRequest();

        // Act
        var expression = GenerateConditionFilter.GenerateConditionExpressionTree<
            TestEntity,
            TestRequest
        >(request);
        var func = expression.Compile();
        var result = func(new TestEntity());

        // Assert
        Assert.That(result, Is.True);
    }

    [Test]
    public void GenerateConditionExpressionTree_WithValidValues_ShouldReturnCorrectResult()
    {
        // Arrange
        var request = new TestRequest
        {
            Name = "Test",
            Age = 18,
            Description = "Description",
            Price = 100,
        };

        // Act
        var expression = GenerateConditionFilter.GenerateConditionExpressionTree<
            TestEntity,
            TestRequest
        >(request);
        var func = expression.Compile();

        // Assert
        var matchingEntity = new TestEntity
        {
            Name = "Test",
            Age = 18,
            Description = "Description",
            Price = 200,
        };
        Assert.That(func(matchingEntity), Is.True);

        var nonMatchingEntity = new TestEntity
        {
            Name = "Test",
            Age = 17,
            Description = "Description",
            Price = 50,
        };
        Assert.That(func(nonMatchingEntity), Is.False);
    }

    [Test]
    public void GenerateConditionExpressionTree_WithContainsComparison_ShouldWorkCorrectly()
    {
        // Arrange
        var request = new TestRequest { Name = "Test", Description = "Test Description" };

        // Act
        var expression = GenerateConditionFilter.GenerateConditionExpressionTree<
            TestEntity,
            TestRequest
        >(request);
        var func = expression.Compile();

        // Assert
        var entity = new TestEntity { Name = "Test", Description = "Test Description" };
        Assert.That(func(entity), Is.True);
    }

    [Test]
    public void GenerateConditionExpressionTree_WithMultipleEntities_ShouldWorkCorrectly()
    {
        // Arrange
        var request = new TestRequest { Name = "Test", Age = 18 };

        // Act
        var expression = GenerateConditionFilter.GenerateConditionExpressionTree<
            TestEntity,
            TestEntity,
            TestRequest
        >(request);
        var func = expression.Compile();

        // Assert
        var entity1 = new TestEntity { Name = "Test", Age = 18 };
        var entity2 = new TestEntity { Name = "Test", Age = 18 };
        Assert.That(func(entity1, entity2), Is.True);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码是一个单元测试类,使用 NUnit 框架来测试一个名为 GenerateConditionFilter 的类的功能。这个类的目的是根据请求对象生成条件表达式树,以便在查询实体时应用过滤条件。以下是代码的详细解释:

1. 测试请求类 TestRequest

这个类定义了几个属性,这些属性带有 QueryFilter 特性,用于指定不同的过滤条件:

  • Name: 可能为 null,使用 NotNull 条件。
  • Age: 整数类型,使用 EqualValue 条件。
  • Description: 可能为 null,使用 NotNullOrEmpty 条件。
  • Price: 小数类型,使用 GtValue 条件。

2. 测试实体类 TestEntity

这个类定义了与 TestRequest 类似的属性,但没有任何特性。它用于模拟数据库中的实体。

3. 测试方法

该类包含多个测试方法,每个方法都测试 GenerateConditionFilter.GenerateConditionExpressionTree 方法的不同场景。

3.1 GenerateConditionExpressionTree_WithNullValues_ShouldReturnTrue

  • 目的: 测试当请求对象的所有属性为 null 时,生成的表达式是否返回 true
  • 逻辑: 创建一个 TestRequest 对象(所有属性为 null),然后生成条件表达式并应用于一个空的 TestEntity 对象,期望返回 true

3.2 GenerateConditionExpressionTree_WithValidValues_ShouldReturnCorrectResult

  • 目的: 测试当请求对象包含有效值时,生成的表达式是否能正确匹配实体。
  • 逻辑: 创建一个包含有效值的 TestRequest 对象,并生成条件表达式。然后测试两个 TestEntity 对象,一个匹配请求条件,另一个不匹配,期望返回相应的布尔值。

3.3 GenerateConditionExpressionTree_WithContainsComparison_ShouldWorkCorrectly

  • 目的: 测试当请求对象的 NameDescription 属性包含特定值时,生成的表达式是否能正确匹配实体。
  • 逻辑: 创建一个包含特定值的 TestRequest 对象,并生成条件表达式。然后测试一个匹配的 TestEntity 对象,期望返回 true

3.4 GenerateConditionExpressionTree_WithMultipleEntities_ShouldWorkCorrectly

  • 目的: 测试当请求对象包含多个实体时,生成的表达式是否能正确匹配。
  • 逻辑: 创建一个包含特定值的 TestRequest 对象,并生成条件表达式。然后测试两个相同的 TestEntity 对象,期望返回 true

总结

这个测试类的主要功能是验证 GenerateConditionFilter 类的 GenerateConditionExpressionTree 方法在不同情况下的行为,确保它能够根据请求对象的属性生成正确的条件表达式,并在应用于实体时返回预期的结果。通过这些测试,可以确保代码的正确性和健壮性。

loading