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

关于@injectmocks和@mock

阎元徽
2023-03-14
@Override
    public PageInfo<RequestList> getAllRequest(int startPage, int pageSize, String accountName,String userName) {
        PageHelper.startPage(startPage, pageSize);
        List<RequestList> list=requestListDao.getAllRequest(accountName,userName);
        for(RequestList requestList:list) {
            switch (requestList.getStatus()) {
            case "0":
                requestList.setStatus("Waiting");
                break;
            case "1":
                requestList.setStatus("Closed");        
                break;
            case "2":
                requestList.setStatus("Cancel");
                break;
            default:
                requestList.setStatus("NAN");
                break;
            }
        }
        PageInfo<RequestList> pageInfo = new PageInfo<RequestList>(list);
        return pageInfo;
    }

@Override
    public void createRequest(RequestList requestList) {
        Integer coount=requestListDao.getTime(requestList.getCreateName());
//      AWSSnsUtil.sendMassageToSns(requestList.getAccountName());
        requestList.setTime(++coount);
        requestListDao.createRequest(requestList);
    }

测试代码:

    @InjectMocks
    RequestListServiceImpl requestListServiceImpl;
    @Mock
    RequestListDao requestListDao;

 @Before
    public void setup(){
        MockitoAnnotations.openMocks(this);
    }


    @Test  //it's ok 
    public void testGetAllRequest() throws Exception {
        RequestList r=new RequestList();
        r.setStatus("0");
        when(requestListDao.getAllRequest(anyString(), anyString())).thenReturn(Arrays.<RequestList>asList(r));
        PageInfo<RequestList> res=requestListServiceImpl.getAllRequest(1,1,"1","1");
        Assert.assertNotNull(res);


    }

 @Test   //this test is error, the error is requestListServiceImpl is not mock.
    public void testCreateRequest() throws Exception {
        when(requestListDao.getTime(anyString())).thenReturn(0);
        RequestList r=new RequestList();
        r.setCreateName("demo");
        requestListServiceImpl.createRequest(r);
        verify(requestListServiceImpl).createRequest(r);

    }

错误信息

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type RequestListServiceImpl and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
    verify(mock).someMethod();
    verify(mock, times(10)).someMethod();
    verify(mock, atLeastOnce()).someMethod();

当我将@injectmocks更改为@mock时,第二个测试是可以的,但第一个测试是错误的。我需要添加到一个stubbingwhen(requestListServiceImpl.getAllRequest(anyInt(),anyInt(),anyString(),anyString())).thenreturn(new pageinfo<>());

我不知道怎么做,

injectmocks是否必要?

共有1个答案

岑驰
2023-03-14

这里:

verify(requestListServiceImpl)

@InjectMocks
RequestListServiceImpl requestListServiceImpl;

消息很清楚:您验证Mockito为您创建的mock对象。

 类似资料:
  • 问题内容: 我目前正在研究Mockito框架,并且已经使用Mockito创建了一些测试用例。但后来我读到的不是调用模拟( SomeClass的 的.class)我可以使用和-我需要做的唯一一件事情就是我的注释测试类或使用的方法。 但这不起作用-似乎不会起作用!这是我的2个代码修订-一个使用注释,另一个不使用注释。 我究竟做错了什么? 正如我所说-这项工作很棒。但是以下内容不会: 这是课程: 我想念

  • 问题内容: 因此,我了解到在Mockito中,@ InjectMocks将使用@Mock的注解注入所有可以注入的内容,但是如何处理这种情况呢? 假设MockObject2的属性类型为MockObject1,而SystemUnderTest的属性类型为MockObject2。我想将模拟对象1注入到模拟对象2中,并将模拟对象2注入到systemUnderTest中。 注释可以吗? 问题答案: 由于我在

  • 问题内容: 和框架有什么区别? 问题答案: 创建一个模拟。创建该类的实例,并将使用(或)注释创建的模拟注入该实例。 请注意,你必须使用或初始化这些模拟并注入它们。

  • 我在课堂上有两个方法。我只想测试孤立的其中一个。

  • 本文档的涵义用一句话总结就是:不要让Apache在分析配置文件的时候使用到DNS解析。如果Apache在分析配置文件时用到了DNS解析,您的服务器就会发生可靠性的问题(也可能根本无法启动),或者遭致拒绝(偷窃)服务攻击(包括用户可以从其他用户那里偷窃点击)。 一个简单示例 <VirtualHost www.abc.dom> ServerAdmin webgirl@abc.dom DocumentR

  • MongoDB 提供了两个用于备份和还原操作的实用工具:MongoDump 和 MongoRestore。它们对于创建小型数据库的备份和还原数据非常有用。