使用Int输入和布尔输出测试日期是否有效的测试类,以及如何测试(java)
我有一个类的赋值,在这个类中,我必须创建一个类(称为FunWithCalendars),该类接受3个int值(月、日和年),并使用1个布尔方法(isValid)检查总日期是否有效,该方法使用3个其他辅助方法(isLeapYear、isValidMonth、isValidDay)来确定给定的日期和月份是否有效。现在我想在Eclipse中测试我的文件。 到目前为止,我已经学会了用这段代码测试类/方法(我是个新手,所以这是我知道的唯一方法):
public class driverFunWithCalendars {
public static void main(String [] args ) {
FunWithCalendars test = new FunWithCalendars () ;
System.out.println( test.FunWithCalendars () );
然而,当我必须输入未在方法中定义的int值时,我不理解如何测试布尔方法的true或false。上面代码中的错误位于“newfunWithCalendars();”和“(test.funwithcalendars());”。 以下是我的主要代码:
public class FunWithCalendars
{
private int month, day, year;
public FunWithCalendars( int m, int d, int y )
{
month = m;
day = d;
year = y;
}
public boolean isValid ( boolean isValidMonth, boolean isValidDay )
{
if ( isValidMonth && isValidDay )
{
return true;
}
else
{
return false;
}
}
public boolean isLeapYear (int year)
{
if ( (year / 400) == 0 )
{
return true;
}
else if ( ((year / 4) == 0) && ((year/100) !=0))
{
return true;
}
else
{
return false;
}
}
public boolean isValidMonth ( int month )
{
if ( month >= 1 && month <= 12 )
{
return true;
}
else
{
return false;
}
}
public boolean isValidDay ( int month, int day, int year, boolean isLeapYear )
{
if ( (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && ((day<=31) && (day>=1)) )
{
return true;
}
else if ( (month == 4 || month == 6 || month == 9 || month == 11) && ((day<=30) && (day>=1)) )
{
return true;
}
else if ( (month == 2) && ( isLeapYear = true) && ((day<=29) && (day>=1)) )
{
return true;
}
else if ( (month == 2) && ( isLeapYear = false) && ((day<=28) && (day>=1)) )
{
return true;
}
else
{
return false;
}
}
}
}
}
基本上,我只想知道如何使用3个int值(日期、月、日、年)测试代码,以查看日期是否有效,是否使用isValid方法。如果我的问题不清楚,或者我解释的作业让人困惑,我真的很抱歉,但正如我所说,我是Java和Stackoverflow问题的新手,我还没有理解Java,我可以提出更高效、更简洁的问题,但我真的希望你们中的一些人能帮助我。我还将附上我的原始作业的翻译稿,如果你想帮助我的话,这可能会让你不那么困惑,也会对你有所帮助:
/* 我们今天使用的日历是公历,由意大利天文学家阿洛伊修斯·利利乌斯设计,教宗格雷戈里十三世于1582年2月24日颁布。在公历中,一年的平均长度正好是365.2425天。我们可以通过一些相当复杂的“闰年”规则来实现这一点:
如果一年可以被4整除,那它就是闰年…除非它可以被100整除,在这种情况下它不是闰年…除非它可以被400整除,在这种情况下它是闰年
好吧,这让人困惑。让我们再试一次:
一年是闰年,如果:
它可以被400整除
它可以被4整除,但不能被100整除
根据这些规则,1512年、1600年和2000年是闰年。1514年、1700年和1900年不是
(你认为闰年只是四年一次!朱利叶斯·凯撒的历法就是这样,这是错误的,因为每四年加上366天,我们的年平均长度为365.25天,而不是更精确的365.2425天。每年0.0075天听起来不算多,但在15世纪天文学家注意到了这一点可预测的事件,如至点和春分点,被“关闭”了大约10天。因此有了新的、改进的日历。)
在公历中,每月的天数如下:
月份名称天数
1月31日
2月28日或29日
3月3日31日
4月4日30日
5月5日至31日
6月6日30日
7月31日
8月8日31日
9月9日至30日
10月10日至31日
11月11日30日
12月12日31日
根据公历的闰年规则和通常的每月天数,使用日历完成课程。您将需要:
三个int字段变量,用于跟踪月份、日期和年份
FunWithCalendars的构造函数,它将接受月、日和年的值,并将它们分配给字段变量。(这是为您编写的,您可以使用启动程序文件FunWithCalendars.java)
方法:
布尔值有效()
它将返回一个true或false。A.true result表示月份和日期是该年的有效值
您将需要三种助手方法:
布尔isLeapYear()
只有当年份代表闰年时,才会返回真值
您还需要:
布尔值isValidMonth()
仅当月份字段介于1和12之间时,才会返回true。最后:
布尔值isValidDay()
只有在给定年份的该月存在该日时,才会返回true。当检查29在2月份是否有效时,记得检查闰年
同样,当且仅当从isValidMonth()和isValidDay()得到true时,我们期望isValid()为true。(我们假设所有年份均有效。)
测试:
2010年7月20日有效
2009年1月13日无效。(13不是有效月份。)
2009年11月31日无效。(该月不存在该日。)
2007年2月29日无效。(2007年不是闰年。)
2000年2月29日有效。(2000年是闰年。)
*/
感谢所有能帮忙的人
# 1 楼答案
让我们以第一次测试为例:
因此,在驱动程序类/测试类中,构造一个
FunWithCalendars
对象,表示2010年7月20日。为此,构造函数接受三个参数。接下来调用它的isValid
方法。我相信这个想法是,你不应该再通过同样的论点。您的isValid
方法接受两个boolean
参数。相反,我认为它不应该接受任何参数,而应该调用两个helper方法来传递FunWithCalendars
对象中已经存在的值。所以,在你可以让你的驱动程序类开始工作之前,我相信你必须在这一点上修正你的设计调用
isValid()
后,将返回值存储到变量中。将其与预期值进行比较(本例中为true
)。如果它们相等,则打印测试通过的语句。如果它们不相等,则打印包含预期值和观察值的语句对其他测试也执行类似操作。不过,不要复制粘贴代码。而是将其包装在一个方法中,并为每个测试用例调用该方法,将特定测试所需的数据作为参数传递。请记住将预期结果作为参数包含,以便方法可以进行比较
编辑:
这是基础知识,我不认为堆栈溢出是教授基础知识的好地方。让我们试一试,只是请把你的期望定得低一点
如何构造对象:您已经在您的驱动程序类中使用
new
运算符执行此操作:只需要将正确的参数传递给构造函数。您的构造函数接受三个
int
参数,因此它需要类似于:如何调用
isValid
方法并使其不带任何参数,在上行之后:这将从
isValid()
(false
或true
)返回的值存储到我命名为calculatedValidity
的新创建的boolean
变量中。从那里,我们可以检查它是否具有预期值,根据它采取行动和/或打印它。最简单的方法是打印,例如:不带参数的调用要求该方法没有任何参数:
如何让
isValid()
调用这两个helper方法:您可以简单地编写方法调用,而不必提及以前存在的参数。再次记住传递正确的参数:在这里的方法调用中,我使用
FunWithCalendars
对象的实例变量(字段)作为参数。这导致该方法使用我们通过构造函数输入的数字,并使用三个helper方法我已经用上面的更改运行了您的代码。我的打印报表打印了预期的:
PS我故意不说任何关于代码中可能存在的错误的事情。最好让你的测试告诉你是否有