DexMaker Mockito издевается над заглушками, шпионами, частичками или как?

Когда я макетирую объект с помощью Mockito.mock(), я ожидаю, что объект заблокировал методы, которые возвращают ноль, 0, ложь и т. Д., Без какого-либо кода реального объекта, над которым я работаю. Я думал, что это было поведение по умолчанию в Java, но Android, кажется, включает в себя реальные объекты как часть макетов. Как мне избежать этого?

public class MockTest extends InstrumentationTestCase {
  public void testMock() {
    Engine engine = mock(Engine.class);
    Car car = new Car(engine);

    car.start(); // Null pointer error, because Engine.starter is null.

    verify(engine, Mockito.times(1)).engageStarter();
  }


  public static class Car {
    private final Engine engine;

    public Car(Engine engine) {
      this.engine = engine;
    }

    public void start() {
      engine.engageStarter();
    }
  }


  public static class Engine {
    private final Starter starter;

    public Engine(Starter starter) {
      this.starter = starter;
    }

    void engageStarter() {
      starter.spin();
    }
  }


  public static class Starter {
    public void spin() {
      System.out.println("Start or explode");
    }
  }
}

1 ответ

Решение состоит в том, чтобы сделать engStarter() публичным.

Другие вопросы по тегам