2012-04-13 79 views
0

测试类我目前正在对以下问题的修订:创建方法和Java的

一个VolumeModel存储数据的音量控制对象。音量有一定的水平,它也可以处于静音状态。

(下面的什么是UML图:)

VolumeModel得出以下为 - 类名

静音:整数 - 属性

程度:int - 属性

+ .. ..方法 - 的该类方法

一)写下所有的方法头,包括构造函数,你会期望在这个类,这样看它符合支持数据封装的传统标准。 (不要编写方法体或文档)。

至于我对这个问题的答案我写的是这样的:

public VolumeModel() 
public VolumeModel(boolean muted, int level) 
public void setLevel(int level) 
public int getLevel() 
public setMuted(boolean muted) 
public boolean isMuted() 
public void turnUp() 
public void turnUp(int level) 
public String toString() 
public boolean equals(VolumeModel V) 

我不知道这是否是所有预期的方法头,包括构造函数,即有望在这一类中可以看出由于以下问题(即与上述有关的问题)下方:

b)利用你部分声明的方法(a)中,编写代码测试程序来:

  • 创建卷模型的实例...
  • 有音量级别1,而不是静音:在一个循环中
  • ,稳步提高音量10级:
  • 然后将音量静音;
  • 最终输出的音量模型对象

至于我的回答对上述到目前为止这一问题的状态,我已经做到了这一点:

VolumeModel vml = new VolumeModel(); 
vml.setLevel(1); 
vml.setMuted(false); 

VolumeModel volumelevel = new VolumeModel(true, 11); 
while (!vml.equals(volumelevel) 
{ 
//to be completed 
} 

这段代码上面没有完成,因为我在这方面挣扎,所以如果有任何提示,有人可以给我,然后我会很感激。

另外,关于我对问题a)的以下答案的任何建议和反馈也会有所帮助。

在此先感谢。

ps - 我无法在我的eclipse软件上尝试这个代码,因为我的eclipse软件由于某种原因不能在我的笔记本电脑上工作,但是当我找时间去我的电脑实验室时,我会看看我是否可以在那边的电脑上测试eclipse软件上的代码。

+1

我建议你测试一下实际工作的代码,如果你发现一个bug,在你的调试器中遍历代码,看看它没有做到你期望的。我会评论说,你似乎没有使用你在b)中的代码中定义的所有方法。 – 2012-04-13 14:55:18

+0

@Peter Lawrey - 感谢您的评论。我不同意你的看法,一旦我下周拿到电脑实验室,我会正确地进行测试,但现在我只能从理论上回答这些问题。 – user1279780 2012-04-13 15:06:09

+1

在这种情况下,我只能回答你的理论需求。 ;)我建议你在(a)中的方法应该只是你在(b)中使用的方法。 – 2012-04-13 15:08:18

回答

1

您不需要创建新的VolumeModel来测试。你也不需要equals方法。

而不是做一个while循环试试这个的:

for(i=2;i<11;i++){ 
    vml.turnUp(); //provided that turnUp sets the volume up a level 
} 
vml.setMuted(true); 

此时你应该指定要如何输出对象的状态。 而不是试图重新实现的toString,因为它似乎你在做什么,你可以创建自己的outputState()这样

public void outputState(VolumeModel v) 

的返回类型为void,因为你可以简单地把一系列的System.out的,或无论你喜欢哪种输出系统。

希望这会有所帮助。

2

一些言论:

  • 你忘了申报setMuted()
  • 返回类型是没有的javadoc。尽管大多数方法都很明显,例如turnUp(int level)是做什么的?参数是否为新的级别(在这种情况下,它与setLevel()执行的操作相同)还是增量?当使用无参数构造函数构造时,对象的状态是什么?
  • 如果equals()被覆盖,那么hashCode()也必须是。合约是相同的对象必须具有相同的hashCode。而且,equals方法应该采用Object作为参数。您可以实现一个equals(VolumeModel)方法,但请注意,您不会覆盖Object.equals()方法,因此该方法将永远不会被集合类调用。
  • 奇怪的是有turnUp方法,但没有turnDown
  • 这是奇怪的没有限制(虽然它没有问在问题中)。

最后,您的代码段不会执行所要求的操作。它应该:

  • 创造出独特的VolumeModel实例,具有音量致电setMuted(true)
  • 电话getLevel()isMuted()中的9次迭代
  • 静音它的循环设置为1,而不是静音
  • 通话turnUp()并检查值分别为10true。 该问题并未要求您实现equals,并测试两个VolumeModel实例之间的相等性。
+1

我会补充说,你应该有'等于(对象)'而不是'等于(VolumeModel)' – 2012-04-13 15:08:52

+0

是的,我错过了。我会编辑我的答案。 – 2012-04-13 15:10:01

+0

感谢您的评论,我的假设是turnUp(int level)增加了音量,而setLevel()只会将音量设置为10级(我可能在这里错了),因为问题(b)只希望音量增加到10级。 – user1279780 2012-04-13 15:13:39