JUnit 测试类失败测试



在我的GradeBook类程序中,我应该向GradeBook类添加一个toString方法,该方法返回一个字符串,每个分数的分数用空格分隔。

我已经这样做了,当我创建 JUnit 测试时,我应该使用 toString 方法来比较分数数组中的内容与分数数组中预期的内容,当我编译和运行 JUnit 测试时,addScore 测试应该是真的。

我们要使用的方法是 assertTrue() 方法。我们的老师给我们的前任应该是这样的形式:

assertTrue(g1.toString.equals("50.0 75.0"); the 50 and 75 are scores taken from the objects of GradeBook made in the JUnit Test Class in the setUp() method but mine will be Totally different.

现在,当我编译并运行程序图时,JUnit 测试说 断言真() 代码,但我不明白为什么。此外,我很肯定我的toString形式正确,但如果有人可以阐明我的程序,我将不胜感激

成绩簿代码为:

import java.util.ArrayList;
import java.util.Arrays;
public class GradeBook
{
private double[] scores;
private int scoresSize;
/**
  Constructs a gradebook with no scores and a given capacity.
  @capacity the maximum number of scores in this gradebook
 */
public GradeBook(int capacity)
{
    scores = new double[capacity];
    scoresSize = 0;
}
/**
  Adds a score to this gradebook.
  @param score the score to add
  @return true if the score was added, false if the gradebook is full
 */
public boolean addScore(double score)
{
    if (scoresSize < scores.length)
    {
        scores[scoresSize] = score;
        scoresSize++;
        return true;
    }
    else
        return false;      
}
/**
  Computes the sum of the scores in this gradebook.
  @return the sum of the scores
 */
public double sum()
{
    double total = 0;
    for (int i = 0; i < scoresSize; i++)
    {
        total = total + scores[i];
    }
    return total;
}
/**
  Gets the minimum score in this gradebook.
  @return the minimum score, or 0 if there are no scores.
 */
public double minimum()
{
    if (scoresSize == 0) return 0;
    double smallest = scores[0];
    for (int i = 1; i < scoresSize; i++)
    {
        if (scores[i] < smallest)
        {
            smallest = scores[i];
        }
    }
    return smallest;
}
/**
  Gets the final score for this gradebook.
  @return the sum of the scores, with the lowest score dropped if 
  there are at least two scores, or 0 if there are no scores.
 */
public double finalScore() 
{
    if (scoresSize == 0)
        return 0;
    else if (scoresSize == 1)
        return scores[0];
    else
        return sum() - minimum();
}
public int getScoresSize() {
    return scoresSize;
}
public String toString(String scoreList){

    for(int i = 0; i < scores.length; i++){
        scoreList += scores[i] + "";
    }
    return scoreList;
}
}

这是 JUnit 测试类:

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class GradeBookTest {
private GradeBook g1;
private GradeBook g2;
@Before
public void setUp() throws Exception {
    g1 = new GradeBook(5);
    g2 = new GradeBook(5);
    g1.addScore(45);
    g1.addScore(68);
    g1.addScore(35);
    g1.addScore(22);
    g2.addScore(99);
    g2.addScore(10);
    g2.addScore(77);
    g2.addScore(43);
}
@After
public void tearDown() throws Exception {
    g1 = null;
    g2 = null;
}
@Test
public void testAddScore() {
    assertTrue(g1.toString().equals("45.0 68.0 35.0 22.0"));
    assertTrue(g2.toString().equals("99.0 10.0 77.0 43.0"));
    assertEquals(45,g1.getScoresSize(),.001);
    assertEquals(68,g1.getScoresSize(),.001);
    assertEquals(35,g1.getScoresSize(),.001);
    assertEquals(22,g1.getScoresSize(),.001);
    assertEquals(99,g2.getScoresSize(),.001);
    assertEquals(10,g2.getScoresSize(),.001);
    assertEquals(77,g2.getScoresSize(),.001);
    assertEquals(43,g2.getScoresSize(),.001);
}

你的 toString 方法有一个签名:

public String toString(String scoreList)

需要参数,你像这样调用它:

g1.toString()

将 toString 方法更改为:

public String toString(){
    String scoreList = "";
    for(int i = 0; i < scores.length; i++){
        scoreList += scores[i] + " "; //remember to add a space here!
    }
    return scoreList;
}

刚刚发现了这个...常见错误...

g1.toString.equals(...)

应该是

g1.toString().equals(....)

请注意 toString 后面的附加括号 - toString 是一个方法,需要调用。

最新更新