如何正确实现测试方法来测试类的变量?

oyjwcjzk  于 2022-10-15  发布在  Java
关注(0)|答案(1)|浏览(140)

我有一个类Palindrome,它有两个方法,一个方法public Deque<Character> wordToDeque(String word)将一个字符串转换为Deque,另一个方法,public boolean isPalindrome(String word)接收一个字符串,将其转换为Deq,并查看字符串是否为Palindrome。这是我的Palindome类代码:

import java.util.Comparator;
import java.util.Deque;
import java.util.Iterator;
import java.util.Objects;

public class Palindrome {
    public Deque<Character> wordToDeque(String word) {
        Deque<Character> L = new LinkedListDeque<>();
        for (int x = 0; x < word.length()-1; x++) {
             L.add(word.charAt(x));
        }
        return L;
    }
    public boolean isPalindrome(String word) {
        Deque<Character> L = new LinkedListDeque<>();

        for (int x = 0; x < word.length()-1; x++) {
            L.add(word.charAt(x));
        }
        Iterator<Character> A = L.descendingIterator();
        Iterator<Character> B = L.iterator();
        while (A.hasNext() && B.hasNext()) {
        if (Objects.equals(A,B)) {
            return true;
        } else {return false;}
    }
        return false;

现在基于此,我尝试测试另一个类TestPalindrome中的一些用例,该类包含Palindrome类的一些测试用例。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class TestPalindrome {
    // You must use this palindrome, and not instantiate
    // new Palindromes, or the autograder might be upset.
    static Palindrome palindrome = new Palindrome();

    @Test
    public void testWordToDeque() {
        Deque<Character> d = palindrome.wordToDeque("persiflage");
        String actual = "";
        for (int i = 0; i < "persiflage".length(); i++) {
            actual += d.removeFirst();
        }
        assertEquals("persiflage", actual);
    }
}

* /

然而,由于在Deque<Character> d = palindrome.wordToDeque("persiflage");中实现Deque时出错,我的TestPalindrome类似乎无法运行。我正在试图找出问题所在,但似乎无法调试。如有任何帮助,我将不胜感激。
错误消息显示:

Incompatible types. Found: 'java.util.Deque<java.lang.Character>', required: 'Deque<java.lang.Character>'
Operator '+' cannot be applied to 'java.lang.String', 'void'

注:这里是我在代码中使用的一些额外接口,以防对调试有帮助。
接口Deque:

Interface Deque<T> {
    void addFirst(T items);
    void addLast(T items);
    String toString();
    void removeLast();
    void removeFirst();
    void get(int index);
    int size();
    boolean isEmpty();
}

接口CharacterComparator:

public interface CharacterComparator<T>{
    boolean equalChars(char x, char y);
}
mqxuamgl

mqxuamgl1#

您使用**运算符“+”**得到的错误是由于Deque<T>接口中的removeFirst()操作返回void,这意味着当您对testWordToDeque()方法执行以下行时,它将产生您指定的错误:

actual += d.removeFirst();

要解决这个问题,您应该将removeFirst()的返回类型更改为T,并且您选择的类型应该覆盖toString()方法,在本例中是Character类。
此外,来自同一接口的操作removeLast()get()也不应该是空的。。
如果不希望“remove”操作返回值,请将其保留为void,并在更改返回类型后使用其他方法,如get()

相关问题