无法实现应该初始化的模拟实例的测试

时间:2017-06-17 16:20:58

标签: java unit-testing junit mocking mockito

我是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()方法。 所以我想通过模拟来测试,一旦你将一个Movie null参数提供给setter,就会抛出异常...所以这是我的尝试...

@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...

}

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

1 个答案:

答案 0 :(得分:0)

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

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

在您的代码中,您确实在测试mockito是否正常工作,因为未调用Rental类代码,而不是因为doThrow(..)...而抛出异常。