3284  ДубоХирург [Off]
(17.01.2016 / 16:24)
Очепятка тут:
[code]
Далее есть несколько способов начать процесс внедрения:
1. В методе setUp вызвать [code java]MockitoAnnotations.initMocks(this);
107  Freddy [Off]
(30.01.2015 / 12:28)
Обнаружил в PowerMock такую полезную возможность, как подавление исполнения кода. Пример:
  1. public class ExampleWithEvilMethod {
  2.  
  3.         private final String message;
  4.  
  5.         public ExampleWithEvilMethod(String message) {
  6.                 this.message = message;
  7.         }
  8.  
  9.         public String getMessage() {
  10.                 return message + getEvilMessage();
  11.         }
  12.  
  13.         private String getEvilMessage() {
  14.                 System.loadLibrary("evil.dll");
  15.                 return "evil!";
  16.         }
  17. }
Можно сделать так:
  1. suppress(method(ExampleWithEvilMethod.class, "getEvilMessage"));
и тест не упадёт в методе, подгружающем dll-ку.
2328  Virus-ONЪ [Off]
(26.12.2014 / 08:18)
Ой всё! Пилю свою статью)) :-D
107  Freddy [Off]
(24.12.2014 / 22:26)
Screamer, в первый раз я не так понял проблему, теперь яснее стало. С одним только Mockito такое сделать нельзя, но если использовать PowerMock, который умеет мокировать конструкторы, можно было бы сделать так:
  1. public class Repository {
  2.  
  3.     private PDO pdo;
  4.  
  5.     public Repository() {
  6.         this.pdo = new PDO();
  7.         /*some code*/
  8.     }
  9.  
  10. }
  1. PDO mock = mock(PDO.class);
  2. whenNew(PDO.class).withNoArguments().thenReturn(mock);
1798  Screamer [Off]
 საქარტველოს გაუმარჯოს
(24.12.2014 / 21:55)
Ниасилил.

Допустим есть следующий код:

[php]
class Repository
{
     private $pdo;

     public function __construct()
     {
         $this->pdo = new \PDO(/*args ...*/);
         /* some code ... */
     }
}
[/php]

Мне нужно сделать так, чтобы на место приватного св-ва $pdo встал мок, при этом экземпляр класса \PDO не был создан, но код в конструкторе, который идёт ниже, должен выполнится.

В PHP такое нереально, насколько я знаю. Разве что runkit какой-нибудь попробовать. Могу ошибаться.

В python я просто оборачиваю функцию декоратором mock.patch: @patch('package.pdo'), где package -- это пакет, в котором располагается тестируемый класс. Соответственно там заимпортирован pdo.
Ну это так к слову.
107  Freddy [Off]
(24.12.2014 / 21:20)
Если создаётся mock с помощью метода mock или аннотации @Mock, то реальный конструктор объекта и не вызывается, он вызывается, если мокировать с помощью spy() или @Spy.
1798  Screamer [Off]
 საქარტველოს გაუმარჯოს
(24.12.2014 / 19:00)
Freddy, а если нужно, чтобы экземпляр класса не создавался, т.к. например там тянется ещё куча зависимостей, создаётся подключение к БД и т.д.?
1798  Screamer [Off]
 საქარტველოს გაუმარჯოს
(24.12.2014 / 18:59)
Naik, очевидно же.
107  Freddy [Off]
(23.12.2014 / 22:57)
Как в PHP и его тестовых фреймворках с этим обстоит, я не знаю, но Mockito может внедрить mock в обоих случаях. В примере, который прикреплён к статье, mock c типом Map<String, MessageHandler> внедряется прямо в приватное поле, так как конструктора и сеттера с подходящим типом в параметрах MessageService не имеет.
275  Naik [Off]
(23.12.2014 / 21:52)
Screamer, второй лучше? :gg:
Всего: 32
1 2 3 4 >>
К записи
Java
Категории

Мы в соцсетях

tw tg yt gt