我正在为我大学的一个项目编写后端,遇到了一个我不理解的错误。
我正在使用 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”
所以我的问题是:有人知道这个错误的来源吗?
如果提供的信息不够,我会给你更多:)
最佳答案
好的,我找到了答案。它完全是另一回事,与 DynamoDB 及其将数据库项映射到 Java 类的功能相关。 映射器类显然需要一个标准的构造函数,而我的 Book 类没有。
对于那些感兴趣的人:
DynamoDBMapper.load 方法在内部调用 Class.NewInstance()。此方法只能使用不带参数的标准构造函数/构造函数。由于我的类中没有这样的构造函数,他抛出了 NoSuchMethodException。
关于java - 尽管方法在 .class 文件中,但在运行类时获取 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805760/