如何使用Mockito的stub()方法?

问题描述 投票:0回答:2

我正在学习Mockito,我尝试使用stub()方法。我有一个简单的代码,但它没有工作,因为我得到这个错误:“方法存根(int)是未定义的类型SpyTest”。我想知道我应该在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>

        <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>2.21.0</version>
        </dependency>

        <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-junit-jupiter</artifactId>
           <version>2.21.0</version>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

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

java junit mockito stub
2个回答
2
投票

这里:

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

您正在调用一个需要int参数的方法。但你既没有声明也没有导入这样的方法。编译器不知道你想要做什么。

正确的方法是:

when(arrayListMock.size()).thenReturn(5);

(从Mockito进口when()后)。

重要的是要明白:与Mockito“嘲弄”和“捣乱”之间没有特别的区别。您只需使用when(mock.someMethod())启动模拟规范。 Mockito没有stub()方法!

然后:请注意,Mockito中的间谍和模拟之间存在差异。模拟是一个完全“虚拟”的对象,它与真实代码没有任何关系。间谍更像是一个包装者,Mockito将“围绕”一个真正的被测对象。您的测试名为SpyTest,但它没有使用间谍。如果它是使用间谍,事情是不同的。

当然,真正的答案是:你永远不会模拟列表。您只需创建一个真实的列表,然后用您需要的元素填充它。也许你放入列表的对象是模拟,但是没有必要模拟列表本身。

恰恰相反:这是不好的做法。您尝试最小化您使用的模拟量。


-2
投票

尝试

@Test
void test() {

    List arrayListMock = mock(ArrayList.class);
    doReturn(5).when(arrayListMock ).size();
    assertEquals(5, arrayListMock.size());

}
© www.soinside.com 2019 - 2024. All rights reserved.