我想模拟一些数据库插入和读取,IE,不要将它们放到我的实际生产数据库中,但是要么创建一个模拟,要么在内存类型的事情中做一些事情,以便能够对一些方法进行单元测试找回假数据。
我如何在activejdbc中执行此操作?
答案 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