Пример #1
0
  @Override
  protected <T> T createMock(
      Class<T> type,
      boolean isStatic,
      boolean isSpy,
      Object delegator,
      MockSettings mockSettings,
      Method... methods) {
    if (type == null) {
      throw new IllegalArgumentException("The class to mock cannot be null");
    }

    validateType(type, isStatic, isSpy);

    final String mockName = toInstanceName(type, mockSettings);

    MockRepository.addAfterMethodRunner(new MockitoStateCleanerRunnable());

    final Class<T> typeToMock;
    if (isFinalJavaSystemClass(type)) {
      typeToMock = (Class<T>) new ClassReplicaCreator().createClassReplica(type);
    } else {
      typeToMock = type;
    }

    final MockData<T> mockData =
        createMethodInvocationControl(
            mockName, typeToMock, methods, isSpy, delegator, mockSettings);

    T mock = mockData.getMock();
    if (isFinalJavaSystemClass(type) && !isStatic) {
      mock = Whitebox.newInstance(type);
      DefaultFieldValueGenerator.fillWithDefaultValues(mock);
    }

    if (isStatic) {
      MockRepository.putStaticMethodInvocationControl(type, mockData.getMethodInvocationControl());
    } else {
      MockRepository.putInstanceMethodInvocationControl(
          mock, mockData.getMethodInvocationControl());
    }

    if (isSpy) {
      new LenientCopyTool().copyToMock(delegator, mock);
    }

    return mock;
  }