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) { } }