Spring Boot:@Autowired 在测试时抛出“UnsatisfiedDependencyException”

问题描述 投票:0回答:1

晚上好,

由于我是 Java 和 Spring Boot 的新手,我的以下问题对你们大多数人来说可能听起来很简单,但我想问一下当 autowiring 模型时我做错了什么 - 如果我是,请原谅java/spring boot 和 python/django 的混合术语 - 在我的 spring boot 测试中。

按照一些简单的步骤设置测试项目:

  1. 使用 start.spring.io

    创建了示例项目

    项目:Maven,语言:Java,Spring Boot 3.2.3,Java:21

  2. 创建了一个名为 Book.java 的小模型类和一个名为 BookRepository.java

    的存储库
  3. 创建了一个占位符测试并尝试运行它

目录:

├── src
    ├── main
    │   ├── java
    │   │   ├── com.example.demo
    │   │   │   ├── book
    │   │   │   │   ├── models
    │   │   │   │   |   └── Book.java
    │   │   │   │   ├── repository
    │   │   │   │   │   └── BookRepository.java
    │   │   │   └── DemoApplication.java
    │   └── resources
    ├── test
    │   ├── java
    │   │   ├── com.example.demo
    │   │   │   ├── book
    │   │   │   │   ├── models
    │   │   │   │   │   └── BookTest.java
    ├── ...

Book.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "books")
public class Book {
    @Id
    private String isbn;

    @Column(unique = true, nullable = false)
    private String title;

    @Column(nullable = false)
    private Integer pages;

    @Column(nullable = false)
    private boolean available = true;
}

BookRepository.java

public interface BookRepository extends CrudRepository<Book, String> {
}

BookTest.java

@SpringBootTest(classes = DemoApplication.class)
public class BookTest {

    @Autowired private BookRepository bookRepository;  // <-- works fine
    @Autowired private Book book;  // <-- throws error

    @Test
    @DisplayName("Placeholder")
    public void testPlaceholder() {
        System.out.println("Placeholder test get's executed!");
    }
}

现在,每当我尝试 autowire 书籍类时,运行测试时都会抛出以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.demo.book.BookTest': Unsatisfied dependency expressed through field 'book': No qualifying bean of type 'com.example.demo.book.models.Book' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

有人可以向我解释我做错了什么或者我在这里失踪了吗?显然,错误来自我的 Book.java,但是我必须从那里添加/更改/删除某些内容以及为什么?

提前致谢,祝周日愉快!

java spring spring-boot testing annotations
1个回答
0
投票

你可以参考这个问题。 您还可以检查 Spring 文档中的Autowiring

© www.soinside.com 2019 - 2024. All rights reserved.