HaoRakan 2024-09-10 11:16 采纳率: 75%
浏览 5

@Mock @Spy创建mock对象失败

今天在学习mockito时,自己创建了mock对象 但在测试时全部被判断为false 偏离预期,想知道原因 以下是结果和代码

img


import com.qf.demo.service.HeroService;                                                                                              
import org.junit.Test;                                                                                                               
import org.junit.jupiter.api.BeforeEach;                                                                                             
import org.junit.jupiter.api.extension.ExtendWith;                                                                                   
import org.mockito.Mock;                                                                                                             
import org.mockito.Mockito;                                                                                                          
import org.mockito.MockitoAnnotations;                                                                                               
import org.mockito.Spy;                                                                                                              
import org.mockito.junit.jupiter.MockitoExtension;                                                                                   
                                                                                                                                     
@ExtendWith(MockitoExtension.class)                                                                                                  
public class MockTest01 {                                                                                                            
    @Mock                                                                                                                            
    private HeroService mockHeroService;                                                                                             
    @Spy                                                                                                                             
    private HeroService spyHeroService;                                                                                              
                                                                                                                                     
    @BeforeEach                                                                                                                      
    public void init() {                                                                                                             
        MockitoAnnotations.openMocks(this);                                                                                          
    }                                                                                                                                
                                                                                                                                     
    @Test                                                                                                                            
    public void test01() {                                                                                                           
        //判断是否是mock对象  true                                                                                                          
        System.out.println("Mockito.mockingDetails(mockHeroService).isMock() = " + Mockito.mockingDetails(mockHeroService).isMock());
        //判断是否是spy对象 false                                                                                                           
        System.out.println("Mockito.mockingDetails(mockHeroService).isSpy() = " + Mockito.mockingDetails(spyHeroService).isSpy());   
        //判断是否是mock对象  true                                                                                                          
        System.out.println("Mockito.mockingDetails(spyHeroService).isMock() = " + Mockito.mockingDetails(spyHeroService).isMock());  
        //判断是否是spy对象 true                                                                                                            
        System.out.println("Mockito.mockingDetails(spyHeroService).isSpy() = " + Mockito.mockingDetails(spyHeroService).isSpy());    
                                                                                                                                     
    }                                                                                                                                
}                                                                                                                                    
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-10 19:10
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的代码和描述,看起来您在创建和使用 Mockito mock 对象时遇到了问题。您的测试结果显示 mockHeroServicespyHeroService 都被判断为不是 mock 对象或 spy 对象,这可能是由以下几个原因导致的:

    1. Mockito版本问题:确保您使用的 Mockito 版本与您的代码和其他依赖项兼容。有时候,不同版本的 Mockito 可能有不同的行为或 API 变化。
    2. 初始化问题:在您的代码中,您在 init 方法中使用了 MockitoAnnotations.openMocks(this) 来初始化 mocks。确保这个方法在测试执行前正确调用。
    3. 使用方式问题:确保在创建 mockHeroServicespyHeroService 之后,您没有在代码中对其进行重新赋值。如果在这之后您又创建或获取了另一个 HeroService 实例,那么原来的 mock 或 spy 实例就会被覆盖。
    4. 依赖问题:确保 HeroService 类是可 mock 的,没有任何最终的(final)方法或类,因为 Mockito 无法 mock 最终的类或方法。

    为了解决这个问题,您可以尝试以下步骤:

    • 确保使用正确版本的 Mockito。
    • 检查 init 方法是否正确调用,并且是在测试方法执行之前。
    • 确保在创建 mock 或 spy 对象后没有重新赋值。
    • 检查 HeroService 类是否可 mock。

    如果问题仍然存在,建议您简化代码,只保留与问题相关的部分,然后逐步调试,以便更容易找到问题的根源。同时,查看是否有任何相关的错误消息或警告,这可能会提供有关问题的更多线索。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月10日
  • 创建了问题 9月10日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见