C#中Bank类的单元测试

时间:2014-07-25 00:02:49

标签: c#

我正在学习为用C#编写的项目创建单元测试。我一直在MSDN网站上关注这个例子,现在我只是在数量小于零时如何创建单元测试。我运行时单元测试应该是失败的。但是,我在下面写的方式,它通过了:( 有人请让我知道我需要做些什么来解决它?感谢

这是我到目前为止所做的:

        // unit test method
        [TestMethod]
        [ExpectedException(typeof(ArgumentOutOfRangeException))]
        public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange()
        {
            // arrange
            double beginningBalance = 11.99;
            double debitAmount = -100.00;


            BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

            // act
            account.Debit(debitAmount);

            // Not sure about this one
            // on my main program, I use if...else to handle
            // the situation when amount > balance by throwing the exception
            double actual = account.Balance;
            Assert.IsTrue(actual < 0, "Actual balance is greater than 0");            
        }

这是我在

上测试的方法
        public void Debit(double amount)
        {
            if (m_frozen)
            {
                throw new Exception("Account frozen");
            }

            if (amount > m_balance)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            m_balance -= amount;
        }

3 个答案:

答案 0 :(得分:2)

测试看起来很好,你预计当金额为负时它会抛出异常,否则它将无法通过。虽然在这种测试中,我最终通常会有类似的东西。

Assert.Fail("Should have thrown exception because of ........")

如果在预期时未抛出异常,那么Assert将无法通过测试。

答案 1 :(得分:1)

你可以这样做:

Assert.AreEqual( beginningBalance - debitAmount, account.Balance );

验证该值是否符合预期,而不是小于零。

答案 2 :(得分:1)

作为个人喜好,我喜欢我的所有测试都成功的时候:)所以我会写这样的东西:

var exception = Assert.Throws<ArgumentOutOfRangeException>(() => account.Debit(debitAmount));
Assert.That(exception.ParamName, Is.Equal("amount"));

而且,可能会为它们抛出不同类型的异常和消息。