说,我有以下界面:
interface AppRepository : GraphRepository<App> {
@Query("""MATCH (a:App) RETURN a""")
fun findAll(): List<App>
}
在测试中,我想检查查询字符串的细节,因此我
open class AppRepositoryTest {
lateinit @Autowired var appRepository: AppRepository
@Test
open fun checkQuery() {
val productionMethod = appRepository.javaClass.getDeclaredMethod("findAll")
val productionQuery = productionMethod!!.getAnnotation(Query::class.java)
//demo test
assertThat(productionQuery!!.value).isNotEmpty() //KotlinNPE
}
}
由于我无法理解的原因,productionQuery
是n null
。我仔细检查过测试类中导入的Query
的类型和存储库中的Query
是否相同。
因此,为什么在这种情况下productionQuery
null
?
答案 0 :(得分:4)
您正在从实现类(即findAll
实例的类)加载appRepository
上的注释,而不是从接口加载findAll
上的注释。要从AppRepository
加载注释:
val productionMethod = AppRepository::class.java.getDeclaredMethod("findAll")
val productionQuery = productionMethod!!.getAnnotation(Query::class.java)