版本260406
This commit is contained in:
153
OrpaonVision.Core/Testing/TestBase.cs
Normal file
153
OrpaonVision.Core/Testing/TestBase.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using OrpaonVision.Core.Results;
|
||||
|
||||
namespace OrpaonVision.Core.Testing;
|
||||
|
||||
/// <summary>
|
||||
/// 测试基类。
|
||||
/// </summary>
|
||||
public abstract class TestBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 测试上下文。
|
||||
/// </summary>
|
||||
protected ITestContext TestContext { get; private set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化测试。
|
||||
/// </summary>
|
||||
/// <param name="testContext">测试上下文。</param>
|
||||
protected virtual void Initialize(ITestContext testContext)
|
||||
{
|
||||
TestContext = testContext;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理测试。
|
||||
/// </summary>
|
||||
protected virtual void Cleanup()
|
||||
{
|
||||
// 清理资源
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建模拟服务。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">服务类型。</typeparam>
|
||||
/// <returns>模拟服务实例。</returns>
|
||||
protected virtual T CreateMockService<T>() where T : class
|
||||
{
|
||||
return TestContext.CreateMock<T>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建测试数据。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据类型。</typeparam>
|
||||
/// <returns>测试数据实例。</returns>
|
||||
protected virtual T CreateTestData<T>() where T : class, new()
|
||||
{
|
||||
return TestContext.CreateTestData<T>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断言结果成功。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">结果类型。</typeparam>
|
||||
/// <param name="result">结果对象。</param>
|
||||
/// <param name="message">断言消息。</param>
|
||||
protected virtual void AssertSuccess<T>(Result<T> result, string? message = null)
|
||||
{
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
throw new AssertException(message ?? $"Expected success but got failure: {result.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断言结果失败。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">结果类型。</typeparam>
|
||||
/// <param name="result">结果对象。</param>
|
||||
/// <param name="expectedErrorCode">期望的错误代码。</param>
|
||||
/// <param name="message">断言消息。</param>
|
||||
protected virtual void AssertFailure<T>(Result<T> 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}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断言非空。
|
||||
/// </summary>
|
||||
/// <param name="value">值。</param>
|
||||
/// <param name="paramName">参数名称。</param>
|
||||
protected virtual void AssertNotNull(object? value, string? paramName = null)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new AssertException($"Expected not null value for parameter {paramName}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断言相等。
|
||||
/// </summary>
|
||||
/// <param name="expected">期望值。</param>
|
||||
/// <param name="actual">实际值。</param>
|
||||
/// <param name="message">断言消息。</param>
|
||||
protected virtual void AssertEquals(object? expected, object? actual, string? message = null)
|
||||
{
|
||||
if (!Equals(expected, actual))
|
||||
{
|
||||
throw new AssertException(message ?? $"Expected {expected} but got {actual}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试上下文接口。
|
||||
/// </summary>
|
||||
public interface ITestContext
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建模拟对象。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">类型。</typeparam>
|
||||
/// <returns>模拟对象。</returns>
|
||||
T CreateMock<T>() where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// 创建测试数据。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据类型。</typeparam>
|
||||
/// <returns>测试数据。</returns>
|
||||
T CreateTestData<T>() where T : class, new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取测试配置。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">配置类型。</typeparam>
|
||||
/// <returns>配置实例。</returns>
|
||||
T GetConfiguration<T>() where T : class, new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断言异常。
|
||||
/// </summary>
|
||||
public class AssertException : Exception
|
||||
{
|
||||
public AssertException(string message) : base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public AssertException(string message, Exception innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user