我在课堂上被告知我必须在main方法中编写和测试我的代码,我写了它,但我不知道如何测试它。我该如何测试我的方法?我应该获取用户输入,然后获取第一个字母,最后一个字母,等等。
import java.util.Scanner;
public class Word
{
public static void main(String[] args)
{
}
public String word;
public void Word()
{
String word = "";
}
public void Word(String word1)
{
String word = word1;
}
public String getWord()
{
return word;
}
public void setWord(String newWord)
{
String word = newWord;
}
public void getFirstLetter()
{
String firstLetter = word.substring(0, 1);
}
public void getLastLetter()
{
String lastLetter = word.substring(word.length() - 1, word.length());
}
public void removeFirstLetter()
{
String noFirstLetter = word.substring(1, word.length());
}
public void removeLastLetter()
{
String noLastLetter = word.substring(0, word.length() - 1);
}
public int findLetter (String parameter)
{
word.indexOf(parameter);
return 1;
}
}
通过使用一些定义的输入调用方法来测试方法,并将结果与期望的输出进行比较。
的例子:
假设你有这样一个方法:
public static int add(int a, int b) {
return a + b;
}
你可以这样测试:
int result = add( 3, 5);
if( result != 8 ) {
//method is wrong
}
所以基本上你定义了一个"契约",关于方法得到什么输入和结果应该是什么(根据返回值或其他改变的状态)。然后你检查你的输入是否得到了那个结果,如果是,你可以假设这个方法工作正确。
为了非常确定(你通常不能完全确定),你需要用不同类型的输入(尽可能多,以测试不同的情况,例如短单词,长单词)测试该方法几次。
你也经常测试你的方法如何处理错误的输入,例如通过传递null或空字符串。
您应该看看像junit这样的工具。
你可以创建一个简单的Test类,并测试你的类和它的行为。
imports ...;
public class MyTest{
@Test
public void testMyClass(){
Word w= new Word();
w.setWord("test");
Assert.assertEquals(w.getFirstLetter(), "t");
}
}
使用像Eclipse这样的工具,您可以很好地运行这样的测试。
给你一个提示:你需要一个Word实例,然后你可以调用你的方法
public static void main(String[] args) {
Word test = new Word();
test.setWord("something");
// here you might read javadoc of the String class on how to compare strings
}
编辑:我忽略了这个:
public void setWord(String newWord)
{
String word = newWord;
}
您编写的代码创建了一个变量word
,并将newWord赋值给它,然后消失。如果你(显然)想要设置一个类的成员,你应该使用this
来引用实例(你在main()中创建的)。
public void setWord(String newWord) {
this.word = newWord;
}
既然我要说这是作业,我将尽量不明确给出答案。在main方法中,您应该设置单词,然后调用每个方法并打印输出以验证它是否正确。
同意Jason的观点。如果你想测试一些东西,只要System.out.println()
它。在你的方法中,你的返回类型不是String
,而是void
,所以你可以改变它,并在主程序run
上打印出来。
如果没有,就把System.out.println()
放到你的void
方法中。应该不会有太大问题!