我正在学习为用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;
}
答案 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"));
而且,可能会为它们抛出不同类型的异常和消息。