如何使用activejdbc对假数据进行单元测试/模拟?

时间:2016-12-01 15:35:51

标签: mocking activejdbc

我想模拟一些数据库插入和读取,IE,不要将它们放到我的实际生产数据库中,但是要么创建一个模拟,要么在内存类型的事情中做一些事情,以便能够对一些方法进行单元测试找回假数据。

我如何在activejdbc中执行此操作?

1 个答案:

答案 0 :(得分:1)

当您需要在项目中测试模型的函数时,您将使用类DBSpec作为JUnit测试的超类,如下所示:

public class MovieSpec extends DBSpec {

    @Test
    public void shouldValidateMovieAttributes() {
        Movie movie = new Movie();
        the(movie).shouldNotBe("valid");
        movie.set("title", "blah", "year", "1122");
        the(movie).shouldBe("valid");
    }

    @Test
    public void shouldStoreDirectorAndMovies() {

        Person director = new Person("Stephen Spielberg");
        director.saveIt();

        director.add(new Movie("Saving private Ryan", 1998));
        director.add(new Movie("Jaws", 1982));

        a(Movie.count()).shouldBeEqual(2);

        List<Movie> movies = director.getAll(Movie.class).orderBy("year");

        the(movies.get(0).getTitle()).shouldBeEqual("Jaws");
        the(movies.get(1).getTitle()).shouldBeEqual("Saving private Ryan");
    }
}

这里发生了很多事情。超类DBSpec将自动执行以下操作:

在测试执行之前:

  • 打开连接
  • 在数据库连接上启动新事务

测试执行后:

  • 回滚数据库事务(删除,插入更新)
  • 关闭数据库连接

这样,您只需编写与业务逻辑相关的代码,而不必担心打开/关闭连接。

此外,由于DBSpec回滚了您的事务,因此您的测试数据库始终处于干净状态。有关显示其工作原理的项目的完整示例,请参阅:https://github.com/javalite/simple-example