我的任务是编写JUnit类。为此,我需要创建一个对象,该对象实现扩展org.springframework.data.jpa.repository.JpaRepository(称为“ KanjiRepo”)的接口,但此应用程序中没有类实际实现KanjiRepo。

而不是新的,所有实现KanjiRepo的对象似乎都是通过@Autowiring创建的。

KanjiRepo接口是仅具有接口的包的成员,并且它们都扩展了org.springframework.data.jpa.repository.JpaRepository。

[问题]我不明白这个问题。有人可以告诉我我刚才说的话是否正确。在我的junit中,我是否还使用@Autowire在与KanjiRepo相同的程序包中创建实现接口的对象?最后一步将需要维护2个单独的应用程序上下文?

最佳答案

我认为,除非您将存储库注释为@Repository,否则在测试类中自动装配KanjiRepo就足够了。

@Repository
public interface KanjiRepo extends JpaRepository....


如果在KanjiRepo顶部有@Repository批注,并且注释了您的主类或配置类以自动扫描Bean; spring可以成功地创建和自动装配bean。

请检查组件扫描

@SpringBootApplication
// or  @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


然后,您可以使用以下代码创建测试类;

@Autowired
KanjiRepo repo;

@Test
public void testFindById() {
    Kanji instance = repo.findById(0L);
    assert.....
}


应该没事。


应用程序和JUnit可以共享相同的配置文件吗?


其实是。但是,如果您进行组件扫描,则不必担心。 Spring将处理您的bean所在的位置,并且应成功自动装配。



我还使用@Autowire创建与KanjiRepo相同的程序包中实现接口的对象吗?



Spring将进行组件扫描并找到您的存储库所在的位置,因此,您不必担心在哪里找到存储库。

08-06 03:15