Spring Boot @Autowired字段为空,尽管存在注解

wkftcu5l  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(197)

我正在尝试编写一个虚拟集成测试,以便对我第一次使用的这些技术进行一些练习,但是,我目前在自动连接的存储库字段(称为 movieRepository)上遇到了NullPointerException。
我从其他问题中了解到主要原因是没有正确设置注解。但是,我认为情况并非如此,因为MovieRepository没有@Repository注解,因为据我所知,MongoRepository不需要它(但即使添加它也不会改变任何事情),而是MovieRepositoryIntegrationTest从它扩展的抽象类中继承了注解。
MovieRepository.java

package com.example.testingtwo.repository; // /main/
public interface MovieRepository extends MongoRepository<Movie, String> {

}

AbstractContainerBaseTest.java

package com.example.testingtwo; // /test/
@DataMongoTest
public abstract class AbstractContainerBaseTest {

    static final MongoDBContainer mongoDBContainer;

    static {
        mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:6.0.2"));
        mongoDBContainer.start();
    }

    @DynamicPropertySource
    static void setProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);
    }
}

MovieRepositoryIntegrationTest.java

package com.example.testingtwo.repository; // /test/
public class MovieRepositoryIntegrationTest extends AbstractContainerBaseTest {

    @Autowired
    private MovieRepository movieRepository;

    @AfterEach
    void cleanUp() {
        movieRepository.deleteAll();
    }

    @Test
    public void testFindById() {
        Movie movie = new Movie(null, "Test Name", "Test Description");
        String movieId = movieRepository.save(movie).getId(); // java.lang.NullPointerException: "this.movieRepository" is null
        Movie movieFound = movieRepository.findById(movieId).orElse(null);

        assertNotNull(movieFound);
        assertEquals(movieFound.getName(), movie.getName());
        assertEquals(movieFound.getDescription(), movie.getDescription());
    }
}

其他信息:

  • Java 17语言
  • Spring Boot 3.0 RC 1
  • 六月五日
  • 构建工具:Maven
  • Spring相关性:Spring Web、Spring Data MongoDB、Lombok岛、测试容器
wvmv3b1j

wvmv3b1j1#

依赖项为空的事实告诉我,单元测试可能没有在Spring上下文中运行,因此就好像您没有@Autowired注解一样。您在使用junit4吗?根据@DataMongoTest的javadoc“当使用JUnit 4时,此注解应该与@RunWith(SpringRunner.class)结合使用。”

相关问题