JDBC repositories上的Mirconaut文档清楚地告诉我们,我们必须创建一个测试库来针对另一种方言进行测试。我认为这是可以管理的(例如,用于生产的Postgres和用于测试的H2)。
问题是我必须在测试存储库中重复我的方法(例如find())。我有一个书库和一个测试库:
@JdbcRepository(dialect = Dialect.POSTGRES)
interface BookRepository extends CrudRepository<Book, Long> {
Optional<Book> find(String title);
}
@JdbcRepository(dialect = Dialect.H2)
@Replaces(bean = BookRepository)
@Requires(env = ["test"])
interface TestBookRepository extends BookRepository {
// Optional<Book> find(String title);
// Required to make the find() method appear in the TestBookRepository
}
为了使find()方法在TestBookRepository中可用,我不得不重复该方法(请参见上面的注释行)。
是否有避免重复自己的更好方法? CrudRepository界面中的方法可以在TestBookRepository中使用,而不会出现问题。为什么find()方法不一样?
BTW,我不想模拟测试库。我想针对SQL数据库测试Micronaut-Data注入的存储库“逻辑”。
您可以利用Micronaut环境为测试和生产创建不同的环境配置并在application-test.yml中配置相应的数据源配置并使用该数据源进行测试