Как исправить Mockito «не издевались» при использовании частного класса в классе, который я хочу проверить - PullRequest
0 голосов
/ 29 марта 2019

Я получаю сообщение об ошибке java.lang.RuntimeException: метод moveTo в android.graphics.Path не высмеивается, когда я хочу проверить свой класс.

Мне кажется, у меня возникли проблемы с пониманием: http://static.javadoc.io/org.mockito/mockito-core/2.25.1/org/mockito/Mockito.html#spy-T- -> "Создает шпиона реального объекта. Шпион вызывает реальные методы, если они не зарезаны". Я не понимаю, почему это так.НЕ используя реальный объект.Как я понимаю насмешки, я не должен беспокоиться об объекте Path.

Класс, который я хочу проверить:


import android.graphics.Canvas;
import android.graphics.Path;
import android.view.MotionEvent;

public class DrawPath(Canvas canvas) {
  private Path drawPath = new Path();
  public DrawPath(Canvas canvas, Paint paint)
    { 
      this.canvas = canvas; 
    }

  public void draw(MotionEvent event)
  {
    if(event.getAction() == MotionEvent.ACTION_DOWN)
       path.moveTo(touchX, touchY);
  }
}

Класс, который должен проверить класс выше:

import static org.mockito.Mockito.*;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.MockitoRule;

@RunWith(MockitoJUnitRunner.class)
public class DrawPathTest {

    @Rule
    public MockitoRule rule = MockitoJUnit.rule();

    @Spy Canvas canvas = new Canvas();

    @Mock MotionEvent mockEvent = mock(MotionEvent.class);

    DrawPath drawPath = null;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testDraw()
    {
        drawPath = new DrawPath(canvas, paint);
        float xy = 0.f;

        xy = 10.f;
        when(mockEvent.getAction()).thenReturn(MotionEvent.ACTION_DOWN);
        when(mockEvent.getX()).thenReturn(xy);
        when(mockEvent.getY()).thenReturn(xy);
        drawPath.draw(mockEvent);
    }
}

...