所以这是下面的问题,并且想知道我的代码是否正确你们可以纠正我,如果我错了吗?感谢:
金卡优惠券规则:
代码:
public class GoldCard : Card
{
int year;
GoldCard(string id, string name, double balance, int year)
: base(id, name, balance)
{
this.year = year;
}
public int Year
{
get { return year; }
set { year = value; }
}
public double CalcCouponValue()
{
double Rate = 0;
if (balance < 2500)
{
Rate = 0.03 * balance;
}
else if (balance > 2500 && year < 2)
{
Rate = 0.04 * balance;
}
else if (balance > 2500 && year > 2)
{
Rate = 0.05 * balance;
}
return Rate;
}
答案 0 :(得分:3)
我建议您查看unit testing.
使用测试框架nUnit,您可以编写如下测试:
[TestFixture]
public class GoldCardTests
{
[TestCase(2000, 1, 2000 * 0.03)]
[TestCase(2500, 1, 2500 * 0.04)]
[TestCase(2500, 2, 2500 * 0.05)]
public void TestNameTest(double balance, int year, double expected)
{
var goldCard = new GoldCard("", "", balance, year);
double calcCouponValue = goldCard.CalcCouponValue();
Assert.AreEqual(expected,calcCouponValue);
}
}
使用上面的代码,您可以单独测试GoldCard类并传递余额和年份的组合,并测试结果是否符合预期。 您还可以测试,如果年份为负,可能会出现例外情况。 这与您在帖子中记下的规则非常相似,但有一个好处,即测试仍然存在,如果您将来更改违反规则的内容,您将收到错误。 测试未通过,因此计算(或测试)中存在错误
public class GoldCard : Card
{
public GoldCard(string id, string name, double balance, int year)
: base(id, name, balance)
{
this.Year = year;
}
public int Year { get; set; }
public double CalcCouponValue()
{
double rate = 0;
if (Balance < 2500)
{
rate = 0.03*Balance;
}
else if (Balance > 2500 && Year < 2)
{
rate = 0.04*Balance;
}
else if (Balance > 2500 && Year > 2)
{
rate = 0.05*Balance;
}
return rate;
}
}
public class Card
{
public string Id { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
protected Card(string id, string name, double balance)
{
Id = id;
Name = name;
Balance = balance;
}
}
答案 1 :(得分:2)
您无需检查'余额&gt; 2500',因为它首先检查是否有statament。
public double CalcCouponValue()
{
double Rate = 0;
if (balance < 2500)
{
Rate = 0.03 * balance;
}
else if ( year < 2)
{
Rate = 0.04 * balance;
}
else if ( year >= 2)
{
Rate = 0.05 * balance;
}
return Rate;
}
答案 2 :(得分:2)
您不应使用随机网络论坛验证代码的正确性。
您应该使用(自动)测试验证代码的正确性(即unit tests)。这就是测试的目的。使用单元测试,您基本上做的是,您定义并验证您在代码(c#)中提到的规则。然后,您可以随时运行这些测试,一旦您对代码进行更改,无论是否破坏了某些现有功能(即现有规则),都可以立即得到反馈。
以下是使用NUnit test framework:
的示例[TestFixture]
public class GoldCardTests
{
[Test]
// balance, year, expected result
[TestCase(2400, 0, 72)]
[TestCase(2500, 0, 72)] // you did not define a rule for this case
[TestCase(2600, 1, 104)]
// add more test cases so all rules are defined
public void CalcCouponValue_should_calculate_correctly(double balance, double year, double expectedResult)
{
// arrange your test (sut == system under test)
var sut = new GoldCard(null, null, balance, year);
// act (execute the test)
var actualResult = sut.CalcCouponValue();
// assert (verify that what you get is what you want)
Assert.That(actualResult, Is.EqualTo(expectedResult));
}
}
答案 3 :(得分:1)
最后一个应该是
else if (balance > 2500 && year >= 2)
{
Rate = 0.05 * balance;
}
如果你的年份恰好是2,你就会得到0。
-update-这样根据你的规格,但是你的规格没有提到什么时候金额恰好是2500.它只谈到2500或更低。