我正在为我的大学的一个项目写一个后端,并且遇到了一个我不理解的错误。
我正在使用IntelliJ,Gradle并使用Spock作为测试环境。 如果该项目的目标是利用亚马逊NoSQL数据库解决方案DynamoDB。 要测试后端的方法,请使用AmazonDB Local。
目前我正在为后端的各种方法编写测试......或者至少我试过了。 当我运行第一次测试时,一旦达到“GetBookWithTitle”方法,我就会得到NoSuchMethodException。 (有趣的事实:方法“AddBook”似乎工作正常)。
这是测试的代码:
def "Test adding a book to the database"(){
when: "Adding a book"
methods.AddBook("TestBook", "Sebastian Müller", 1990, "Gregors", "FunkyTestCover", mapper);
then: "The book should be added"
methods.GetBookWithTitle("TestBook", mapper) != null;
}
这是“GetBookWithTitle”方法的来源:
public Book GetBookWithTitle(String title, DynamoDBMapper mapper){
Book result = mapper.load(Book.class, title);
return result;
}
我尝试了什么: - 使用相应的gradle任务清理项目 - 手动删除项目的“build”文件夹 - 反编译.class文件以确保“GetBookWithTitle”存在
所以我的问题是:是否有人知道这个错误源自何处?
如果提供的信息不充分,我会给你更多信息:)
答案 0 :(得分:3)
好的,我找到了答案。它完全不同于DynamoDB及其将数据库项映射到java类的功能。 mapper类显然需要一个我的Book类没有的标准构造函数。
对于那些感兴趣的人:
DynamoDBMapper.load方法在内部调用Class.NewInstance()。此方法只能使用不带参数的标准构造函数/构造函数。因为我班上没有这样的构造函数,所以他抛出了NoSuchMethodException。