You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试以接口为参数的静态函数?GetAngle的IPoint2D参数如何赋值?

入参为接口类型的静态函数测试方案

接口本身无法直接实例化,要给GetAngle方法的IPoint2D类型入参赋值,有两种常用实现方式:

方案1:手写轻量测试实现类(无额外依赖,最通用)

自己写一个仅在测试项目里用的简单类,实现IPoint2D接口即可,不需要额外引入第三方组件:

// 测试专用的IPoint2D实现
public class TestPoint : IPoint2D
{
    public int mX { get; set; }
    public int mY { get; set; }

    public void Set(int X, int Y)
    {
        mX = X;
        mY = Y;
    }

    public override string ToString() => $"X:{mX}, Y:{mY}";
}

测试时直接实例化这个类,给属性赋值后传入方法即可:

// 测试用例示例:计算(0,0)到(1,1)的连线角度
IPoint2D startPoint = new TestPoint();
startPoint.Set(0, 0);
IPoint2D endPoint = new TestPoint();
endPoint.Set(1, 1);

double result = GeometryAlgorithm.GetAngle(startPoint, endPoint);
// 断言结果约等于45即可

方案2:用Mock框架动态生成接口实例

如果项目已经引入单元测试Mock框架(比如Moq、NSubstitute),可以不用手写实现类,直接在测试代码里动态生成接口的代理实例,以Moq为例:

var mockStart = new Mock<IPoint2D>();
mockStart.SetupGet(p => p.mX).Returns(0);
mockStart.SetupGet(p => p.mY).Returns(0);

var mockEnd = new Mock<IPoint2D>();
mockEnd.SetupGet(p => p.mX).Returns(1);
mockEnd.SetupGet(p => p.mY).Returns(1);

double result = GeometryAlgorithm.GetAngle(mockStart.Object, mockEnd.Object);

注意:你贴的GetAngle方法存在两个潜在问题:

  • 两个int值直接做除法会执行整数运算,丢失小数精度,建议计算时先转成double类型:(double)(End.mY - Start.mY)/(End.mX - Start.mX)
  • 当起止点X坐标相等时,会触发除零异常,需要额外做边界判断

内容的提问来源于stack exchange,提问作者Jr. dective

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:18:18