尽管方法在.class文件中,但在运行类时获取NoSuchMethodException

时间:2014-11-07 16:31:29

标签: java intellij-idea gradle amazon-dynamodb

我正在为我的大学的一个项目写一个后端,并且遇到了一个我不理解的错误。

我正在使用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”存在

所以我的问题是:是否有人知道这个错误源自何处?

如果提供的信息不充分,我会给你更多信息:)

1 个答案:

答案 0 :(得分:3)

好的,我找到了答案。它完全不同于DynamoDB及其将数据库项映射到java类的功能。 mapper类显然需要一个我的Book类没有的标准构造函数。

对于那些感兴趣的人:

DynamoDBMapper.load方法在内部调用Class.NewInstance()。此方法只能使用不带参数的标准构造函数/构造函数。因为我班上没有这样的构造函数,所以他抛出了NoSuchMethodException。