using OrpaonVision.Core.Results;
namespace OrpaonVision.Core.Testing;
///
/// 测试基类。
///
public abstract class TestBase
{
///
/// 测试上下文。
///
protected ITestContext TestContext { get; private set; } = null!;
///
/// 初始化测试。
///
/// 测试上下文。
protected virtual void Initialize(ITestContext testContext)
{
TestContext = testContext;
}
///
/// 清理测试。
///
protected virtual void Cleanup()
{
// 清理资源
}
///
/// 创建模拟服务。
///
/// 服务类型。
/// 模拟服务实例。
protected virtual T CreateMockService() where T : class
{
return TestContext.CreateMock();
}
///
/// 创建测试数据。
///
/// 数据类型。
/// 测试数据实例。
protected virtual T CreateTestData() where T : class, new()
{
return TestContext.CreateTestData();
}
///
/// 断言结果成功。
///
/// 结果类型。
/// 结果对象。
/// 断言消息。
protected virtual void AssertSuccess(Result result, string? message = null)
{
if (!result.Succeeded)
{
throw new AssertException(message ?? $"Expected success but got failure: {result.Message}");
}
}
///
/// 断言结果失败。
///
/// 结果类型。
/// 结果对象。
/// 期望的错误代码。
/// 断言消息。
protected virtual void AssertFailure(Result result, string? expectedErrorCode = null, string? message = null)
{
if (result.Succeeded)
{
throw new AssertException(message ?? "Expected failure but got success");
}
if (expectedErrorCode != null && result.Code != expectedErrorCode)
{
throw new AssertException(message ?? $"Expected error code {expectedErrorCode} but got {result.Code}");
}
}
///
/// 断言非空。
///
/// 值。
/// 参数名称。
protected virtual void AssertNotNull(object? value, string? paramName = null)
{
if (value == null)
{
throw new AssertException($"Expected not null value for parameter {paramName}");
}
}
///
/// 断言相等。
///
/// 期望值。
/// 实际值。
/// 断言消息。
protected virtual void AssertEquals(object? expected, object? actual, string? message = null)
{
if (!Equals(expected, actual))
{
throw new AssertException(message ?? $"Expected {expected} but got {actual}");
}
}
}
///
/// 测试上下文接口。
///
public interface ITestContext
{
///
/// 创建模拟对象。
///
/// 类型。
/// 模拟对象。
T CreateMock() where T : class;
///
/// 创建测试数据。
///
/// 数据类型。
/// 测试数据。
T CreateTestData() where T : class, new();
///
/// 获取测试配置。
///
/// 配置类型。
/// 配置实例。
T GetConfiguration() where T : class, new();
}
///
/// 断言异常。
///
public class AssertException : Exception
{
public AssertException(string message) : base(message)
{
}
public AssertException(string message, Exception innerException) : base(message, innerException)
{
}
}