using Microsoft.VisualStudio.TestTools.UnitTesting; using YLErp.Modules.SwapModule.Margin; namespace UnitTestProject.Modules.SwapModule.Margin { /// /// 保证金账户(MarginAccount)单测。验证余额变动(追加/释放/返还)。 /// 保证金就是保证金——有余额、有利率、有利息,不存在"计息基数/Notional"概念。 /// [TestClass] public class MarginLegTest { private const decimal Opening = 2_000_000m; #region MarginAccount 余额变动 [TestMethod] public void 账户_初始余额等于期初保证金() { var account = new MarginAccount(new MarginBalance(Opening)); Assert.AreEqual(Opening, account.Balance.Balance); } [TestMethod] public void 账户_追加保证金_余额增加() { var account = new MarginAccount(new MarginBalance(Opening)); account.Deposit(500_000m); Assert.AreEqual(2_500_000m, account.Balance.Balance); } [TestMethod] public void 账户_释放保证金_余额减少() { var account = new MarginAccount(new MarginBalance(Opening)); account.Withdraw(800_000m); Assert.AreEqual(1_200_000m, account.Balance.Balance); } [TestMethod] public void 账户_释放超过余额_不低于零() { var account = new MarginAccount(new MarginBalance(Opening)); account.Withdraw(3_000_000m); Assert.AreEqual(0m, account.Balance.Balance, "保证金余额不低于零"); } #endregion #region 三种保证金形态解析器 [TestMethod] public void 三种形态解析器_各自返回正确Form和余额() { IMarginResolver cash = new CashMargin(); IMarginResolver credit = new CreditMargin(); IMarginResolver guarantee = new GuaranteeMargin(); Assert.AreEqual(MarginForm.Cash, cash.Form); Assert.AreEqual(MarginForm.Credit, credit.Form); Assert.AreEqual(MarginForm.Guarantee, guarantee.Form); Assert.AreEqual(Opening, cash.Resolve(Opening).Balance); Assert.AreEqual(Opening, credit.Resolve(Opening).Balance); Assert.AreEqual(Opening, guarantee.Resolve(Opening).Balance); } #endregion } }