【问题标题】:Repository is null in tests [duplicate]存储库在测试中为空[重复]
【发布时间】:2023-02-04 02:27:13
【问题描述】:

我有这个存储库:

public interface CourseRepository extends MongoRepository<Course, String> 
{

    void deleteByUniqueId(String uniqueId);

    Optional<Course> findByUniqueId(String courseUniqueId);
}

我想使用 TestNG 编写测试。到目前为止,我试过这个:

@DataMongoTest
@SpringBootTest(classes= {Application.class})
public class CourseRepositoryTest {

    @Autowired
    private CourseRepository courseRepository;

    private Course course;

    @BeforeMethod
    public void setUp() {
        CourseAddRequest courseAddRequest = new CourseAddRequest();
        course = new Course(courseAddRequest);
        courseRepository.save(course);
    }

    @Test
    public void testFindByUniqueId() {
        Optional<Course> foundCourse = courseRepository.findByUniqueId(course.getUniqueId());
        assertTrue(foundCourse.isPresent());
        assertEquals(foundCourse.get(), course);
    }

但我得到错误: java.lang.NullPointerException: Cannot invoke "com.cti.repository.CourseRepository.save(Object)" because "this.courseRepository" 为空

我应该改变什么?谢谢!

【问题讨论】:

  • 名义上,链接副本中的答案将是您解决此问题的资源。如果您确定它们没有,请提供更多信息 - 最值得注意的是,如果您尝试在调试模式下运行测试,您会看到什么(例如,在您的 SpringBootTest 注释中,添加 properties = { "debug=true" } 和看看是否有任何事情突然出现,可能对帮助您或我们解决此问题有价值)。
  • 假设您在测试应用程序属性中定义了一个数据源,那么您可能只需使用 @SpringBootTest 注释您的测试(删除 classes=...),然后删除 @DataMongoTest 注释。

标签: java testng spring-boot-test


【解决方案1】:

你不是在初始化 courseRepository,你必须在你的某个地方编写一些代码

courseRepository = new CourseRepository(...);

或者只是对该类型对象的一些分配。

编辑: 为了测试,通常会有类似存根或者嘲笑,您可以创建一个新文件,例如 ReposotiryMock.java,在其中创建一个扩展接口 CourseRepository 的类 RepositoryMock(或 RepositoryStub),然后为该接口(在 RepositoryStub 类中)提供一个最小实现,以便您可以出于测试目的模仿 CourseRepository 的行为。

【讨论】:

  • 我不确定如何实例化,因为 CourseRepository 是一个接口并且它不允许实例化。
  • Spring 是一个依赖注入/控制反转框架,因此您无法控制对象何时实际上实例化,Plegeus。
  • 接口与否,对象没有实例化,那么你需要一个具有接口的对象并实例化它。
  • @Plegeus - 不过,Spring 会处理这个问题。
  • 那么spring会实例化那个接口吗?有趣的...
猜你喜欢
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2016-07-28
相关资源
最近更新 更多