如何测试以接口为参数的静态函数?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
相关产品推荐
相关产品推荐

