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

正在获得模拟但未正确返回值的方法

长孙弘壮
2023-03-14

我正在尝试单元测试我的类,它看起来像:-

   class A{
       private void method1(){
          B b=new B();
          C c=b.method2();
          if(c!=null){
             ...
             ...
          }
       }
}

我想在类B中模拟“method2()”。我知道我们需要有一个B()的mock对象,这样每当我们调用它的方法时,就会发生模拟。这是我试过的

A aMock=Easymock.createNiceMock(A.class);
B bMock=Easymock.createNiceMock(B.class);
Powermock.expectNew(B.class).andReturn(bMock).anyTimes();
Easymock.expect(bMock.method2()).andReturn(new C()).anyTimes();
//have done all the replays and verifies

并使用amock.method1()调用它,现在的主要问题是method2被嘲弄了(即method2()的主体没有被执行),但我无法接收C的对象作为响应。

我的测试场景是:-

我想测试类A的method1(),它反过来调用类B的method2(),但我不想让它执行它的代码(method2()),因为它是一个DB调用,而且我还需要method2()返回的C对象,所以我使用mocking来实现这一点。

共有1个答案

潘俊楚
2023-03-14

如果要测试类aMethod1(),则不应创建a的模拟。这意味着您不应该在执行a amock=easymock.createniceMock(a.class);

对于您的测试场景,测试将类似于:

import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
public class ATest {

    A testableA = new A();

    @Test
    public void testMethod1() throws Exception {
        B bMock = EasyMock.createNiceMock(B.class);
        PowerMock.expectNew(B.class).andReturn(bMock).anyTimes();
        EasyMock.expect(bMock.method2()).andReturn(new C()).anyTimes();
        PowerMock.replay(B.class);
        EasyMock.replay(bMock);

        testableA.method1();

        //assert and validate your scenario here
    }
}

您可以按照这里的文档操作。

 类似资料:
  • 给定一个类Foo 为什么我用Spock来嘲笑Foo 调用总是返回false? 不确定这是否有区别,但测试是在Groovy/Spock中进行的,而Foo是在Java8中进行的。

  • 我有一个测试类包含测试方法和两个服务类和。我正在为类中的方法编写JUnit测试,该类包括对类方法的调用。在我写的测试方法中 因此,当调用时,它应该返回大小为1,但不返回此列表,返回的是一个大小为0的列表。

  • 我按照此链接处的代码读取bmp文件中的像素值,以便能够读取像素的RGB值,当我将整个图像作为一种颜色并读取随机像素值时,它们是正确的。在此之后,我尝试制作它,以便函数也会尝试查找有多少独特的颜色,所以我添加了一个不同颜色的框到图像中,但函数仍然只能找到一种颜色。我想知道我是否不知何故没有查看BMP中包含的所有字节,但我不确定这会是怎样的,因为我是新尝试这种东西的。 为了确保代码没有找到不同颜色的像

  • 问题内容: def size_of_dir(dirname): print(“Size of directory: “) print(os.path.getsize(dirname)) 是有问题的代码。dirname是一个目录,其中包含 130个 文件,每个文件约 1kb 。当我调用此函数时,它返回 4624 ,这 不是 目录的大小…为什么? 问题答案: 此值(4624B)代表的大小 文件 是 描

  • 我很清楚关于这个话题有多个问题,但我就是弄不懂它的意思。问题似乎是没有将新值添加到@cacheable列表中。 调试完问题后,我发现问题似乎出在钥匙上。 下面是代码片段 所以当我调用save方法时,用于缓存的关键字是incrementing integer,或者1,2,3...但是当我尝试获取所有文档时,缓存使用SimpleKey[]作为键。如果我尝试为@Cacheable使用相同的键,我会得到S

  • 当我使用apache/poi计算Irr值时,我得到了两倍。NaN,但在excel中同样的输入,我得到了一个负值。 那么为什么它们返回不同的价值呢?