当前位置: 首页 > 知识库问答 >
问题:

使用SpringMockk进行Spring Boot服务层测试

邵星河
2023-03-14

我正在用Kotlin做一个Spring Boot项目。

目前我正在尝试编写单元测试,因此我使用Mockk,尤其是springmockk。

这是我的RecipeService类:

@Service
class RecipeService(
    private val recipeRepository: RecipeRepository,
    private val recipeMongoTemplateRepository: RecipeMongoTemplateRepository
) {

    @Autowired
    private lateinit var categoryService: CategoryService

    @Autowired
    private lateinit var courseService: CourseService

    @Autowired
    private lateinit var dietService: DietService
    
    ......

}

我的测试类看起来像这样:


@ExtendWith(SpringExtension::class, MockKExtension::class)
class RecipeServiceTest {

    @MockkBean
    private lateinit var recipeRepository: RecipeRepository

    @MockkBean
    private lateinit var recipeMongoTemplateRepository: RecipeMongoTemplateRepository

    @Autowired
    private lateinit var recipeService: RecipeService

    @Test
    fun test() {
        recipeService.getAll()
    }
}

当试图在我的服务中注入模拟存储库时,我会遇到以下问题:

组织。springframework。豆。工厂UnsatifiedPendencyException:创建名为“nl”的bean时出错。whatsonthemenu。后端。配方RecipeServiceTest”:通过字段“recipeService”表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBean定义异常:没有类型为“nl”的合格bean。whatsonthemenu。后端。配方RecipeService’available:至少需要1个符合autowire候选资格的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

有人知道问题可能是什么吗?或者我将如何在Spring中使用Mockk正确测试我的服务层?

谢谢你!

共有1个答案

徐正雅
2023-03-14

使用@Import让Spring Test生成你的配方服务的一个实例,否则,没有什么可以自动连线的,因为异常显示:

@ExtendWith(SpringExtension::class, MockKExtension::class)
@Import(RecipeService::class)
class RecipeServiceTest {
 类似资料:
  • 我有一个DTO,它在控制器层通过BeanValidation(javax.validation)和定制验证器(org.springframework.validation.Validator)的组合进行验证。通过这种方式,我可以检查提供的输入是否有效,然后转换实体中的DTO并将其转发到服务层。 然后是业务逻辑验证。例如:@Entity用户的startDate必须在某个事件发生之后,如果最后创建的用

  • 问题内容: 我正在测试一个应用程序,该应用程序从邮箱中取出邮件,根据该邮件的内容执行一些操作,然后根据操作结果发送响应邮件。 我正在寻找一种为该应用程序编写测试的方法。理想情况下,我希望这些测试能够启动自己的邮件服务器,将测试电子邮件推送到该邮件服务器上的文件夹中,并让我的应用程序将邮件从测试开始的邮件服务器中删除。 配置应用程序以使用邮件服务器并不困难,但是我不知道在哪里寻找在Java中启动邮件

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit

  • 我正在使用Spring-3.1.0.ga开发一个服务(不是web应用程序)。我想使用hibernate-validator和Spring来验证我的服务输入。 我启用了bean验证支持: 我已经用@validated和@notnull、@size、@valid等方法参数注释了我的服务接口,它工作得很好。 我不能在接口级别注释@validate(group1.class),因为各种方法对各种组进行操作

  • 我的目标是建立一个环境,让CircleCI在不同的浏览器中运行BrowserStack上的e2e测试。 我的测试假设有一个模拟服务器在运行。(例如,测试正在检查是否已对模拟服务器进行了某个调用。)

  • 我正在springboot应用程序中编写Junits,它只有一个初始化器类 以及其他控制器和服务类。 服务类的Junit如下所示: 当我运行Junit时,它会抛出如下错误: 我还尝试了所有注释,如,@ContextConfiguration(classes=Initializer.class),,但它仍会抛出相同的错误。代码中没有其他类似于应用程序上下文的配置类。