繁体   English   中英

Java。 添加方法来测试构造函数

[英]Java. Adding a Method to test a Constructor

添加一个方法来测试短语构造器将字符串转换为大写。 请勿在测试中使用toUpperCase方法。 使用文字字符串(用引号括起来的“这是文字字符串”)。 请记住,不能使用==来比较两个对象(字符串是对象)must必须使用equals方法。

我收到“争论的左手一定是变量”错误。

public class PhraseTest {


public boolean phraseTest(String phrase) {

    boolean passes = false;
    if (String.compareTo(phrase("test")) = phrase.toUpperCase()) {

    System.out.println(phrase);
    return passes;
}
}
}

不同的班级在这里。

 package edu.htc.java1.phrasegame.model;

import java.util.ArrayList;

public class Phrase {
    private String phrase;

    public Phrase(String phrase) {
        phrase = phrase.toUpperCase();
        for(char c : phrase.toCharArray()) {
            letters.add(new Letter(c));
        }
    }

    public String getPhrase() {
        return phrase;
    }

    // public String phrase;
    ArrayList<Letter> letters = new ArrayList<Letter>();

    public ArrayList<Letter> getLetters() {
        return letters;
    }

}

if (String.compareTo(phrase("test")) = phrase.toUpperCase())您想在该行做什么? String.compareTo是一个函数,因此编译器告诉您String.compareTo不是变量;它是变量。 短语是一个字符串(这是传入的参数),所以我不确定您的意思吗? 也许您是说new Phrase(phrase).getPhrase().equals(phrase.toUpperCase())

因为当您使用single =操作时,您正在执行赋值操作,所以编译器期望左侧有一个变量来保存右侧的值。

因此,尝试更改此行:

if (String.compareTo(phrase("test")) = phrase.toUpperCase()) {

像这样:

if (new Phrase("test").getPhrase().equals(phrase.toUpperCase())) {

做测试的那条线应该是这样的

if ("TEST".equals(new Phrase("test").getPhrase())) {

或者更好的是,如果您使用的是JUnit,请执行断言

Assert.assertEquals("TEST", new Phrase("test").getPhrase());

在这两种情况下,我们都将创建一个新的Phrase ,并确保其中的实际文本是所传递内容的大写版本。

如果这使您更容易理解,则可以将其分为两行。

Phrase phraseToTest = new Phrase("test");
if ("TEST".equals(phraseToTest.getPhrase())) {

顺便说一句,您的班级有一个bug,因此该测试将失败,直到您修复该bug。

我有两个问题。

首先,您要进行赋值,而不是对if条件进行比较 这就是导致您看到的错误的原因(您正在尝试将phrase.toUpperCase()的结果分配给String.compareTo(phrase("test"))

第二个问题是,在String类中没有名为compareTo static方法,因此即使您固定了要进行比较而不是赋值的条件,这仍然行不通。 一个compareTo(String)的方法String类, 但它不是static compareTo是一个实例方法,因此您需要一个对象来调用该方法,您不能像当前正在尝试的那样从静态上下文中调用它。

我对要实现的最佳猜测是:

public boolean phraseTest(Phrase phrase) {
    return "TEST".equals(phrase.getPhrase());
}

我将phrase参数更改为Phrase类的实例(否则它不是真的在测试Phrase吗?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM