【问题标题】:Cannot implement test of a mocked Instance which should be initialized无法实现应初始化的模拟实例的测试
【发布时间】:2017-06-17 16:20:57
【问题描述】:

我是 Mockito 框架的新手,我想我明白了,但不知何故实施它似乎不起作用。

public class Rental {

private int daysRented;
private Movie movie;

public Movie getMovie() {
    return movie;
}

public void setMovie(Movie movie) {
    if (movie.equals(null)) {
        throw new RuntimeException("Can not set a Movie to Rental");
    }
    this.movie = movie;
}

public int getDaysRented() {
    return daysRented;
}

}

在这里我想测试 setMovie() 方法。 所以我想通过模拟来测试,只要你给 setter 一个 Movie null 参数就会抛出一个异常......所以这是我的尝试......

@Test(expected = RuntimeException.class)
public void letSetMovieFailByNullMovie() {
       Rental rental = new Rental();
       Movie mockedMovie = mock(Movie.class);

       doThrow(new RuntimeException()).when(rental).setMovie(mockedMovie);

       rental.setMovie(mockedMovie);
       //mockedMovie should somehow be null here...

}

所以我的问题是: 我想检查是否由于 null Movie 引发了异常。但是,如果我无法初始化 null-Movie,我应该如何在这种情况下使用模拟?

【问题讨论】:

  • 你在做什么?你应该总是嘲笑 Collaborators 而不是 SUT。只需将null 传递给setMovice 方法即可。

标签: java unit-testing junit mocking mockito


【解决方案1】:

在这种情况下不需要使用 Mockito,只需使用 null 参数调用此方法就足够了。像这样:

@Test(expected = RuntimeException.class)
public void letSetMovieFailByNullMovie() {
    Rental rental = new Rental();
    Movie nullMovie = null;
    rental.setMovie(nullMovie);
}

在您的代码中,您实际上是在测试 mockito 是否正常工作,因为没有调用 Rental 类代码,而不是因为 doThrow(..)... 而引发了异常。

【讨论】:

  • 谢谢!我怎么知道何时/何地使用 mockito?
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多