代码之家  ›  专栏  ›  技术社区  ›  lannyf

如果从其他类使用kotlin内部对象,如何模拟它

  •  0
  • lannyf  · 技术社区  · 5 年前

    internal object SessionController {
    @JvmStatic
        fun getRegistrationId(context: Context): String? {
            return doGetRegId(context, GRE_KEY)
        }
    
        @JvmStatic
        fun setRegisterationId(context: Context, regId: String){
            if (getRegistrationId(context) != regId) {
               doSetRegId(context, regId)
            }
        }
    
    }
    
    Class Client {
    
       fun register(regId: String) {
          val id = SessionController.setRegistrationId(context, redId)
          ... ... 
       }
    }
    

    测试将要执行以下操作:

    @Test
    public void test {
       Client client = new SessionController();
       String testResult = "test_result";
       
       /// does not work
       try (MockedStatic<SessionController> sessionCtrlMock = Mockito.mockStatic(SessionController.class)) {
    
                sessionCtrlMock.when(() -> SessionController.getRegistrationId(any(Context.class)))
                        .thenReturn(testResult);
                
                sessionCtrlMock.when(() -> SessionController.setRegistrationId(any(Context.class)), anyString())
                        .thenCallRealMethod();
    
                //test
                client.register(testResult);
    
                // do verify
                ... ...
            }
       ///
    }
    

    0 回复  |  直到 5 年前