簡體   English   中英

當`mockito'不返回正確的模擬列表時

[英]mockito `when` not returning correct mocked list

我有一個測試類TestService1其中包含測試方法以及兩個服務類Service1Service2 我正在編寫Service2類中方法isResourceAlreadyPresent JUnit測試,其中包括對Service1類方法的調用。 在測試方法中,我寫了

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

因此,當testMapper1.getAlreadyPresentResources()時,它應返回大小為1但不返回此列表的mockTestResourceList ,並且返回大小為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 ...
  }

您需要做的是在junit調用任何方法之前,在要對其進行測試的Service2類中設置Service1對象。 我想您尚未在Service 2中正確設置Service1對象,並且其取其他值。

在對Service2調用任何測試方法之前,請使用Reflection在Service2類中設置Service1對象。 反射應僅用於測試目的,而不能用於代碼中。

ReflectionTestUtils.setField(service1instance, "service",
            serviceobjectvalue);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM