【问题标题】:Testing Class Methods in JUnit?在 JUnit 中测试类方法?
【发布时间】:2018-02-08 19:41:02
【问题描述】:

我目前正在编写一个需要一些示例 JUnit 测试的程序。我的程序的目标是根据导演按字母顺序对电影进行分类。我正在使用Comparator 类,它将采用ArrayListMovies 并按导演的字母顺序对其进行排序。

问题 1:无法在我的 JUnit 测试类中使用“add”方法将 Movies 添加到 ArrayList,有什么想法吗?

问题 2:如何将 DirectorComparator 测试为 JUnit 测试用例?

电影.java:

import java.util.*;

public class Movie {
  String title;

  String director;

  public Movie(String title, String director) {
    this.title = title;
    this.director = director;
  }

  public String getAuthor() {
        return author;
    }

  public static Comparator<Movie> DirectorComparator = new Comparator<Movie>() {
        public int compare(Movie movie1, Movie movie2) {
            String director1 = movie1.getDirector();
            String director2 = movie2.getDirector();
            return director1.compareTo(director2);
        }
    };

MovieTest.java

 import org.junit.Test;
 import java.util.*;
 import static org.junit.Assert.*;

 public class MovieTest {

    Movie movie1("Star Wars", "Lucas, George");
    Movie movie2("ET", "Spielberg, Steven");
    Movie movie3("The Godfather", "Coppola, Francis Ford");

    ArrayList<Movie> Movies = new ArrayList<Movie>();

    Movies.add(movie1); <=== FIRST ISSUE, CANNOT USE "ADD"??

    @test
    <===== SECOND ISSUE, WHAT TYPE OF STRUCTURE TO USE FOR THE DIRECTORCOMPARATOR TEST CASE??

在这里非常感谢任何帮助!

【问题讨论】:

  • 这里有很多问题,首先:DirectorComparator 不是一种方法

标签: java testing intellij-idea arraylist junit


【解决方案1】:

首先让我们稍微简化一下比较器的实现:

public class Movie {
    private String title;
    private String director;

    public Movie(String title, String director) {
        this.title = title;
        this.director = director;
    }

    public static final Comparator<Movie> DirectorComparator =
        Comparator.comparing(movie -> movie.director);
}

然后让我们为所有可能的情况编写一个测试:

public class MovieTest {
    @Test
    public void directorComparatorReturnsZeroWhenSameDirectors() {
        // given
        Movie movie1 = new Movie("Star Wars", "Lucas, George");
        Movie movie2 = new Movie("Star Wars", "Lucas, George");

        // when
        final int actualResult = Movie.DirectorComparator.compare(movie1, movie2);

        // then
        Assert.assertEquals(0, actualResult);
    }

    @Test
    public void directorComparatorReturnsNegativeWhenSecondDirectorGreater() {
        // given
        Movie movie1 = new Movie("Star Wars", "Lucas, George");
        Movie movie2 = new Movie("Star Wars", "Mucas, George");

        // when
        final int actualResult = Movie.DirectorComparator.compare(movie1, movie2);

        // then
        Assert.assertEquals(-1, actualResult);
    }

    @Test
    public void directorComparatorReturnsPositiveWhenFirstDirectorGreater() {
        // given
        Movie movie1 = new Movie("Star Wars", "Mucas, George");
        Movie movie2 = new Movie("Star Wars", "Lucas, George");

        // when
        final int actualResult = Movie.DirectorComparator.compare(movie1, movie2);

        // then
        Assert.assertEquals(1, actualResult);
    }
}

顺便说一句,要完成您的原始测试,您应该通过这种方式添加电影:

Movie movie1 = new Movie("Star Wars", "Lucas, George");
Movie movie2 = new Movie("ET", "Spielberg, Steven");
Movie movie3 = new Movie("The Godfather", "Coppola, Francis Ford");

List<Movie> movies = new ArrayList<>();
movies.add(movie1);
movies.add(movie2);
movies.add(movie3);

但是这个集合与DirectorComparator 完全没有关系。因此,DirectorComparator 的测试不需要它。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多