我想模拟一些数据库插入和读取,IE,而不是对我的实际生产数据库执行它们,而是创建一个模拟,或者在内存中做一个临时类型的事情,以便能够对一些方法进行单元测试以获取假数据。
我如何在activejdbc中做到这一点?
我想模拟一些数据库插入和读取,IE,而不是对我的实际生产数据库执行它们,而是创建一个模拟,或者在内存中做一个临时类型的事情,以便能够对一些方法进行单元测试以获取假数据。
我如何在activejdbc中做到这一点?
当您需要在项目中测试模型的功能时,您可以使用该类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