GeWuYou 43dcae0cf5 refactor(pipe): 重构函数式编程扩展方法为模块化结构
- 将原有的PipeExtensionsTests拆分为多个专门的测试类
- 创建ControlExtensionsTests用于控制流函数测试
- 创建EnumerableExtensionsTests用于集合操作函数测试
- 创建FunctionExtensionsTests用于高级函数操作测试
- 移除旧的综合测试文件中的多余测试方法
- 更新文档结构以反映新的模块化组织方式
- 重新整理README.md文档为模块化分类说明
2026-01-31 15:11:33 +08:00

164 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.functional.pipe;
using NUnit.Framework;
namespace GFramework.Core.Tests.functional.pipe;
/// <summary>
/// PipeExtensions扩展方法测试类用于验证管道和函数组合扩展方法的正确性
/// 包括管道操作、函数组合等核心功能的测试
/// </summary>
[TestFixture]
public class PipeExtensionsTests
{
#region Pipe Tests
/// <summary>
/// 测试Pipe方法 - 验证值能够正确传递给函数并返回结果
/// </summary>
[Test]
public void Pipe_Should_Execute_Function_And_Return_Result()
{
// Arrange
var value = 5;
// Act
var result = value.Pipe(x => x * 2);
// Assert
Assert.That(result, Is.EqualTo(10));
}
#endregion
#region Then Tests
/// <summary>
/// 测试Then方法 - 验证两个函数能够正确组合执行
/// </summary>
[Test]
public void Then_Should_Compose_Two_Functions()
{
// Arrange
Func<int, int> addTwo = x => x + 2;
// Act
var composed = addTwo.Then((Func<int, int>)MultiplyByThree);
var result = composed(5);
// Assert
Assert.That(result, Is.EqualTo(21)); // (5+2)*3 = 21
return;
int MultiplyByThree(int x) => x * 3;
}
#endregion
#region After Tests
/// <summary>
/// 测试After方法 - 验证反向函数组合的正确性
/// </summary>
[Test]
public void After_Should_Compose_Functions_In_Reversed_Order()
{
// Arrange
Func<int, int> multiplyByThree = x => x * 3;
// Act
var composed = multiplyByThree.After((Func<int, int>)AddTwo);
var result = composed(5);
// Assert
Assert.That(result, Is.EqualTo(21)); // (5+2)*3 = 21
return;
int AddTwo(int x) => x + 2;
}
#endregion
#region Tap Tests
/// <summary>
/// 测试Tap方法 - 验证副作用操作执行后返回原值
/// </summary>
[Test]
public void Tap_Should_Execute_Action_And_Return_Original_Value()
{
// Arrange
var value = 42;
var capturedValue = 0;
// Act
var result = value.Tap(x => capturedValue = x);
// Assert
Assert.That(result, Is.EqualTo(42));
Assert.That(capturedValue, Is.EqualTo(42));
}
#endregion
#region Apply Tests
/// <summary>
/// 测试Apply方法 - 验证函数能够正确应用到参数上
/// </summary>
[Test]
public void Apply_Should_Apply_Function_To_Argument()
{
// Arrange
Func<int, int> multiplyByTwo = x => x * 2;
// Act
var result = multiplyByTwo.Apply(5);
// Assert
Assert.That(result, Is.EqualTo(10));
}
#endregion
#region Also Tests
/// <summary>
/// 测试Also方法 - 验证执行操作后返回原值功能
/// </summary>
[Test]
public void Also_Should_Execute_Action_And_Return_Original_Value()
{
// Arrange
var value = 42;
var capturedValue = 0;
// Act
var result = value.Also(x => capturedValue = x);
// Assert
Assert.That(result, Is.EqualTo(42));
Assert.That(capturedValue, Is.EqualTo(42));
}
#endregion
#region Let Tests
/// <summary>
/// 测试Let方法 - 验证值转换功能
/// </summary>
[Test]
public void Let_Should_Transform_Value()
{
// Arrange
var value = 5;
// Act
var result = value.Let(x => x * 2);
// Assert
Assert.That(result, Is.EqualTo(10));
}
#endregion
}