using Microsoft.VisualStudio.TestTools.UnitTesting; using YLErp.Helpers; using YLErp.Model; namespace UnitTestProject.Modules { /// /// EQD-6953 疑似到期债券值域闸门:IsMaturedDegenerate / IsResultAbsurd 分支覆盖。 /// 场景来源:UAT 060203.IB(2006年国债,2026估值日已无剩余现金流)—— /// jquantlib 对空现金流求解得 ytm=0、净/全价均为面值100,errCode=0"成功但退化"。 /// 与前端 swapCalc.js::getBondCalcErrorMessage 的同款闸门保持一致口径。 /// [TestClass] public class BondCalcHeplerTest { [TestMethod] public void 到期退化值_三条件同时成立_命中() { var r = new CalBondResult { cleanPrice = 100m, dirtyPrice = 100m, ytm = 0m }; Assert.IsTrue(BondCalcHepler.IsMaturedDegenerate(r)); } [TestMethod] public void 正常券_不命中_按UAT实测180205IB() { var r = new CalBondResult { cleanPrice = 97.43300000000002m, dirtyPrice = 100.00001369863016m, ytm = 6.738278242318886m }; Assert.IsFalse(BondCalcHepler.IsMaturedDegenerate(r)); } [TestMethod] public void ytm为0但净价非面值_不命中_真实零息平价券场景() { var r = new CalBondResult { cleanPrice = 99.5m, dirtyPrice = 100m, ytm = 0m }; Assert.IsFalse(BondCalcHepler.IsMaturedDegenerate(r)); } [TestMethod] public void 价格为面值但ytm非0_不命中_正常息票平价券场景() { var r = new CalBondResult { cleanPrice = 100m, dirtyPrice = 100.5m, ytm = 3.2m }; Assert.IsFalse(BondCalcHepler.IsMaturedDegenerate(r)); } [TestMethod] public void ytm为null_不命中() { var r = new CalBondResult { cleanPrice = 100m, dirtyPrice = 100m, ytm = null }; Assert.IsFalse(BondCalcHepler.IsMaturedDegenerate(r)); } [TestMethod] public void IsResultAbsurd_到期退化值_命中并带原因() { var r = new CalBondResult { cleanPrice = 100m, dirtyPrice = 100m, ytm = 0m }; var ok = typeof(BondCalcHepler) .GetMethod("IsResultAbsurd", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) .Invoke(null, new object[] { r, null }); Assert.IsTrue((bool)ok); } } }