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
Java mockito`when`未返回正确的模拟列表_Java_Unit Testing_Junit_Mockito - Fatal编程技术网

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

Java mockito`when`未返回正确的模拟列表,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我有一个测试类TestService1包含测试方法和两个服务类Service1和Service2。我正在为Service2类中的方法IsResourceReadyPresent编写JUnit测试,该类包括对Service1类方法的调用。在我写的测试方法中 when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList); 因此,当调用testMapper1.getAlreadyPresentResou

我有一个测试类TestService1包含测试方法和两个服务类Service1和Service2。我正在为Service2类中的方法IsResourceReadyPresent编写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对象。我假设您没有在服务2中正确设置Service1对象,并且它采用了一些其他值

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

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

这是我已经编写的测试代码,不能工作,因为我不能发布它。您可以将其视为哑代码。