2014-01-22 5 views
0

Я использую mockito для укупорки.Шум в нескольких уровнях

Это минимальное представление о моей настройке. Assume метода получение и установки на месте

class Person { 
    String name; 
} 

class Car { 
    Person owner; 
} 

class CarPool { 
    Car car; 

    String getOwner() { 
     car.getOwner.getName() 
    } 
} 

class testClass { 
    CarPool carPool = new CarPool(); 

    Car car = mock(Car.class); 
    when(car.getOwner.getName()).thenReturn("name"); 

    carPool.setCar(car); 

    assertEquals(carPool.getOwner, "name"); 
} 

Я получаю NullPointer при попытке это как GetOwner не Allready погасили. Можно ли это сделать? если нет, то в этом случае лучшее решение?

+0

Почему Mockito будет знать, что вернуться на 'carPool.getOwner'? – xyz

+0

Террористически мне кажется, что Мокко знает тип владельца. Таким образом, он мог бы установить осмеянный объект Owner с помощью метода stubbed getName –

+0

Я имею в виду, какое значение? Я не думаю, что это будет так умно, чтобы сделать это самостоятельно – xyz

ответ

2

Вы можете выполнять глубокую штамповку.

Car car = mock(Car.class, Mockito.RETURNS_DEEP_STUBS); 

Обратите внимание, что глубокая штамповка обычно означает, что код не чист. Рассмотрим следующую цитату из документации:

Каждый раз, когда макет возвращается, издевается, что волшебница умирает.

Источник: Mockito documentation

+0

Только то, что я просил, но я полностью прочитаю закон demeter и почему я не должен использовать это –

Смежные вопросы