如何使用我创建的 objects 测试 java 中的方法? (欢迎提供有用的标题建议。)

How do I test a method in java with objects I created? (Helpful title suggestions are welcome.)

我正在通过 class 了解 JAVA...

我被告知要添加一个方法 (void swapNames(Greeter other)) 来交换这个欢迎者的名字和另一个。然后在 Greeter class 中创建两个 object 并使用 swapNames 方法交换它们的名称。

我从 ..

开始
public class Greeter {

    public Greeter(String aName){
        name = aName;
    }


    public String sayHello(){
        return "Hello, " + name + "!";
    }

    private static String name;

    public static void swapNames(Greeter other){

        String aux = name;
        name = other.getName();
        other.setName(aux);
    }

    private void setName(String aux) {
        Greeter.name = aux;
    }

    private String getName() {
        return name;
    }

}

但我不确定如何测试我的代码。

我有一个带有 main 方法的测试器 class,我创建了两个 object Greeter 实例..

Greeter nameGreeter = new Greeter("John Smith");
Greeter nameGreeter = new Greeter("Jane Doe");

虽然我不确定该去哪里。

如果你的swapNames方法是static(如问题代码),它应该接受两个Greeter作为参数,否则它不会知道this Greeter 交换时的名字。

我会创建方法实例(删除 static 关键字),然后:

  • other.getName() 存储在方法范围的变量中
  • 设置other.setName(this.name)
  • this.name 设置为您的存储变量

然后您可以实例化两个具有不同名称的 Greeter,调用其中一个的 swap 方法并将另一个作为参数,并通过您的 getter 或您的 sayHello方法。

测试范围的选择将影响您选择的框架或方法:仅打印或记录、断言,或使用一些专门的框架,例如 JUnit。

不要使用单个静态变量来保存应该是某个对象实例的 属性 的任何内容。

class Greeter {
    private String name; // like this!

    public void swap( Greeter other ){ // like this!

现在测试:

Greeter greetsJohn = new Greeter( "John Smith" );
Greeter greetsJane = new Greeter( "Jane Doe" );
System.out.println( greetsJohn.sayHello() );
System.out.println( greetsJane.sayHello() );
greetsJohn.swapNames( greetsJane );
System.out.println( greetsJohn.sayHello() );
System.out.println( greetsJane.sayHello() );

静态字符串名称意味着每个人都向同一个人打招呼。

AssertEquals 可用于检查字符串的值。

测试可以这样进行:

Greeter greetsJohn = new Greeter("John Smith");
Greeter greetsJane = new Greeter("Jane Doe");

greetsJohn.swapNames(greetsJane);

assertEquals("Name in greetsJohn is replaced with jane","Jane Doe",greetsJohn.sayHello());

语法:assertEquals(message, expectedValue, actualValue);