我试图从For循环获得10个案例的所有10个结果。但是当我跑步时,它只是为我返回第一次的第一次结果。对于这种情况的任何帮助,这是我的整个代码,它包括 2个文件,我已多次尝试修复它。
//file BankAccount.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bank //just want to demo this thing, it hasn't completed
{
namespace BankAccountNS
{
public class BankAccount
{
private double m_balance;
public BankAccount(double balance)
{
m_balance = balance;
}
public bool getMoney(double amount) //funtion get money from account
{
if (amount > m_balance || amount < 0) //check money
{
return false;
}
return true;
}
}
}
}
//file BankAccountTests.cs
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Bank.BankAccountNS;
namespace BankTest
{
[TestClass]
public class BankAccountTests
{
[TestMethod]
public void TestEveryDebit(BankAccount Ba) //test every case from TestAll
{
Assert.IsTrue(Ba.getMoney(24000));
}
[TestMethod]
public void TestAll() //create all cases
{
for(int i = 0; i < 10; i++)
{
BankAccount Ba = new BankAccount(23996 + i);
TestEveryDebit(Ba);
}
}
}
}
答案 0 :(得分:0)
我不清楚你的(尝试过的)循环断言会完成什么,但方法getMoney
似乎有2(或3)个有用的单元测试:
金额是否大于我的余额? - 返回false
我的帐户余额是否小于零 - 返回false
我的金额是否小于或等于我的余额? - 返回true
在您当前的设置中(如果它可以工作)您只是测试getMoney
对于甚至大于余额的金额返回true - 这是不正确的,并且不符合您编码的逻辑太
我看到您的单元测试看起来像:
private double _balance = 50;
private BankAccount _unitTestObject;
[TestMethod]
public void getMoney_returnsFalseWithInsufficientFunts() //create all cases
{
_unitTestObject = new BankAccount(_balance );
var results = _unitTestObject.getMoney(_balance+1);
Assert.IsFalse(results);
}
[TestMethod]
public void getMoney_returnsFalseWhenAccountHasLessThanZero() //create all cases
{
_unitTestObject = new BankAccount(-1);
var results = _unitTestObject.getMoney(1);
Assert.IsFalse(results);
}
[TestMethod]
public void getMoney_returnsTrueWhenAccountSufficientBalance() //create all cases
{
_unitTestObject = new BankAccount(_balance);
var results = _unitTestObject.getMoney(_balance);
Assert.IsTrue(results);
}
正如我在评论中所述,MSTest无法进行参数化测试,而您尝试做的事情(断言特定逻辑10次)可以这样做:
[TestClass]
public class BankAccountTests
{
[TestMethod]
public void TestAll() //create all cases
{
for(int i = 0; i < 10; i++)
{
BankAccount Ba = new BankAccount(23996 + i);
TestEveryDebit(Ba);
}
}
private void TestEveryDebit(BankAccount Ba) //test every case from TestAll
{
Assert.IsTrue(Ba.getMoney(24000));
}
}
但 测试TestAll
将始终失败,因为在您的循环中的某个时刻,您将尝试取出更多内容amount
balance
比Assert
。
当{{1}}基于循环时,&#34;成功或失败&#34;测试的基础是整体,而不是每个人的断言。因此,即使你的循环运行了几次&#34;通过&#34;,测试也会失败。