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

mockito`when`未返回正确的模拟列表

索瀚海
2023-03-14

我有一个测试TestService1包含测试方法和两个服务类Service1Service2。我正在为Service2类中的IsResourcealReadyPresent方法编写JUnit测试,该类包括对Service1类方法的调用。在我写的测试方法中

when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList);

因此,当调用TestMapper1.GetalReadyPresentResources()时,它应该返回MockTestResourceList大小为1,但不返回此列表,返回的是一个大小为0的列表。

    @ContextConfiguration(locations = "../TestServiceApplicationContext1.xml")
    public class TestService1
    {
      @Autowired
      private TestMapper1 testMapper1;

      private TestResource testResource1;
      private List<TestResource> mockTestResourceList;

      private Service1 service1;

      private Service1 service2;

      @Before
      public void setUp()  
      {
        testMapper1 = mock(TestMapper1.class);

        service1 = Service1Util.getService();
        service1.setTestMapper1(testMapper1);

        mockTestResourceList = new ArrayList<TestResource>();
        testResource1 = Service1Util.createTestResource();
        testResource1.setId(1);
        mockTestResourceList.add(testResource1);

      }

      @Test
      public void isResourceAlreadyPresentTest()
      {
        when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList);

        boolean isPresent = service2.isResourceAlreadyPresent();

        assertTrue(isPresent == true);
      }

    }

    public class Service2
    {
      ... some code ...

      public boolean isResourceAlreadyPresent()
      {
        List<TestResource> resourceList = Service1Util.getAlreadyPresentResources(); //service1.getTestMapper1().getAlreadyPresentResources(); 
        //resourceList size is 0
        if(resourceList.size() > 0)
          return true;
        else
          return false;
      }

      ... some code ...
  }

共有1个答案

司寇照
2023-03-14

您需要做的是在您的junit调用任何方法之前,在您正在对其进行测试的Service2类中设置Service1对象。我想您没有在Service 2中正确设置Service1对象,并且它正在取其他值。

在对Service2调用任何测试方法之前,使用反射设置Service2类中的Service1对象。反射应该只用于测试目的,而不是在代码中使用。

ReflectionTestUtils.setField(service1instance, "service",
            serviceobjectvalue);
 类似资料:
  • 这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应 我试图写一个测试用例和模拟方法findByEmail()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。 有人能帮忙吗。

  • 我正在尝试单元测试我的类,它看起来像:- 我想在类B中模拟“method2()”。我知道我们需要有一个B()的mock对象,这样每当我们调用它的方法时,就会发生模拟。这是我试过的 并使用调用它,现在的主要问题是method2被嘲弄了(即method2()的主体没有被执行),但我无法接收C的对象作为响应。 我的测试场景是:- 我想测试类A的method1(),它反过来调用类B的method2(),但

  • 我正在对我的一个服务进行Mockito单元测试,我试图模拟它,但无法返回所需的对象。我的代码片段如下所示: 现在,通过了测试用例,但是失败了,因为。 我很困惑,我不是刚刚模拟了返回一个的行为吗?我做了一些研究,发现了这篇文章:Mockito when/then not returning expected value,我想知道如何使用“doreturn()...when()”定义嘲笑行为,但仍然没

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

  • 我有一个类,它具有外部依赖性,返回列表的未来。如何模拟外部依赖?