如何在 Mockito 中使用 stub() 方法?

我正在学习 Mockito 并尝试使用 stub() 方法。我有一个简单的代码,但它不起作用,因为我收到了这个错误:“SpyTest 类型的方法 stub(int) 是未定义的”。我想知道我应该在 pom 文件中添加什么依赖项才能使用这个 stub() 方法?先感谢您!


这是代码:


package com.dgs.mockito;


import static org.junit.jupiter.api.Assertions.*;

import static org.mockito.Mockito.mock;


import java.util.ArrayList;

import java.util.List;


import org.junit.jupiter.api.Test;


class SpyTest {

    @Test

    void test() {

        List arrayListMock = mock(ArrayList.class);

        assertEquals(0, arrayListMock.size());

        stub(arrayListMock.size()).toReturn(5);

    }

}

这是 pom 文件:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dgs.mockito</groupId>

  <artifactId>mockito-example</artifactId>

  <version>0.0.1-SNAPSHOT</version>


    <properties>

        <maven.compiler.source>1.8</maven.compiler.source>

        <maven.compiler.target>1.8</maven.compiler.target>

    </properties>


    <dependencies>      

        <dependency>

            <groupId>org.hamcrest</groupId>

            <artifactId>hamcrest-library</artifactId>

            <version>1.3</version>

            <scope>test</scope>

        </dependency>


         <dependency>

            <groupId>org.junit.jupiter</groupId>

            <artifactId>junit-jupiter-api</artifactId>

            <version>5.3.1</version>

            <scope>test</scope>

         </dependency>


         <dependency>

           <groupId>org.junit.jupiter</groupId>

           <artifactId>junit-jupiter-engine</artifactId>

           <version>5.3.1</version>

        </dependency>


我正在看 Udemy 的教程,他正在使用这种存根方法。如果我尝试手动添加导入,我会收到此错误:“无法解析导入 org.mockito.Mockito.stub”。我想我需要在 pom 文件中添加另一个依赖项。


拉丁的传说
浏览 275回答 2
2回答

弑天下

这里:stub(arrayListMock.size()).toReturn(5);您正在调用一个需要 int 参数的方法。但是您既没有声明也没有导入这样的方法。编译器不知道您要做什么。正确的方法是:when(arrayListMock.size()).thenReturn(5);(when()从 Mockito导入后)。需要了解的重要一点:Mockito 的“模拟”和“存根”之间没有具体区别。您只需用于when(mock.someMethod())启动模拟规范。stub()Mockito 中没有方法!然后:请注意,Mockito 中的spy和mock是有区别的。模拟是一个完全“虚拟”的对象,与真实代码没有任何关系。间谍更像是一个包装器,Mockito 将它“围绕”在被测类的真实对象周围。您的测试名为SpyTest,但它没有使用间谍。如果它会使用间谍,事情就不同了。当然,真正的真正答案是:您永远不会模拟列表。您只需创建一个真正的列表,并用您需要在其中的元素填充它。也许您放入列表中的对象是模拟的,但是模拟列表本身的需求为零。相反:这是不好的做法。您尝试尽量减少您使用的模拟量。

慕标5832272

尝试@Testvoid test() {&nbsp; &nbsp; List arrayListMock = mock(ArrayList.class);&nbsp; &nbsp; doReturn(5).when(arrayListMock ).size();&nbsp; &nbsp; assertEquals(5, arrayListMock.size());}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java