Когда я издеваюсь над объектом с помощью Mockito.mock(), я ожидаю, что у объекта будут обработаны методы, которые возвращают null, 0, false и другие, без какого-либо кода реального объекта, который я издеваюсь. Я думал, что это поведение по умолчанию на Java, но Android, похоже, включает в себя реальные объекты как часть макетов. Как мне избежать этого?DexMaker Mockito издевается над заглушками, шпионами, частицами или что?
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");
}
}
}
Поскольку я не хочу, чтобы это сделать, я иду в поисках почему Mockito не гасит пакет-частные метод ... – Tremelune
Сюжета утолщается: https://code.google.com/p/mockito/issues/detail? id = 127 Кажется, что ответ №7 на что-то, как и в этом Android-проекте, тестируемый исходный код находится в другом исходном каталоге. – Tremelune
Это из-за загрузчиков классов. Пакетная видимость работает только тогда, когда классы загружаются одним и тем же загрузчиком классов. Mockito mocks всегда загружаются в свой собственный загрузчик классов. –