Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Mockito-类中的mock字段_Unit Testing_Spring Mvc_Mockito - Fatal编程技术网

Unit testing Mockito-类中的mock字段

Unit testing Mockito-类中的mock字段,unit-testing,spring-mvc,mockito,Unit Testing,Spring Mvc,Mockito,我有一个关于Mockito框架的问题。有没有办法在类中模拟字段?假设我们有: @组件 公共A类{ @自动连线 B B; public methodExample(){b.doSth();} } C类{ @自动连线 A A; } @试验 public void testMethodExample(){…} } 是否有可能模拟B对象以强制方法doSth的返回值?我知道我可以将mock对象作为构造函数的参数传递,但我想知道是否还有其他选项?您可以提供一个受保护的setter,仅用于测试,并使您的测试

我有一个关于Mockito框架的问题。有没有办法在类中模拟字段?假设我们有:

@组件
公共A类{
@自动连线
B B;
public methodExample(){b.doSth();}
}
C类{
@自动连线
A A;
}
@试验
public void testMethodExample(){…}
}

是否有可能模拟B对象以强制方法doSth的返回值?我知道我可以将mock对象作为构造函数的参数传递,但我想知道是否还有其他选项?

您可以提供一个受保护的setter,仅用于测试,并使您的测试包结构镜像主代码的包结构

或者,您可以根据需要使用Powermock扩展来模拟私有/受保护字段

你可以看一看。 通过此注释,Mockito将分别尝试通过构造函数、属性和字段分配mock,并在第一个成功的方法停止。 因此,您的场景的单元测试可能如下所示:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith( MockitoJUnitRunner.class )
public class c
{

    @InjectMocks
    A a;

    @Mock
    B b;

    @Test
    public void testMethodExample()
    {
        a.methodExample();
    }
}
以下几点值得注意:

  • @injectmock
    将只考虑用
    @Mock
  • 有必要使用
    MockitoJUnitRunner
    或调用
    org.mockito.MockitoAnnotations.initMocks(this)以创建和注入模拟

这正是@InjectMocks注释的用途。威利安做对了!
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith( MockitoJUnitRunner.class )
public class c
{

    @InjectMocks
    A a;

    @Mock
    B b;

    @Test
    public void testMethodExample()
    {
        a.methodExample();
    }
}