макет ресурса в сервисе java (mockito)

1

Я делаю некоторые тесты для класса Export Мне нужно высмеять метод, поэтому я сделал mockito (я новичок в Mockito)

public Class ExportServiceImpl implements ExportService{

   @Autowired
   Service service

   public void export(){

      String exportString = service.getPath();
      domoreStuff() ....

  }    

А также

  public Class ServiceImpl implements Service(){

      public String getPath(){
          return "thePath";
      }
  }   

Мне нужно высмеять метод getPath(), поэтому я сделал это в TestNG

 public class ExportTestNG(){

    public textExport(){

     Service serviceMock = Mockito.mock(Service.class);
     Mockito.when(serviceMock.getData()).thenReturn("theNewPath");
     System.out.println("serviceMock.getData() : " + serviceMock.getData()); // prints "theNewPath", OK

     exportService.export();  // the getData() is not the mockito one

    }
 }

Возможно, я не исправил mockito, и я, возможно, не понял, как это работает. Есть идеи?

Теги:
mockito

2 ответа

0
Лучший ответ

Вам необходимо подключить макет службы к объекту exportService. Если у вас есть сеттер для переменной члена службы, выполните следующие действия:

exportService.setService(serviceMock);// add this line.
exportService.export();

Если у вас нет сеттера, вам нужно будет выполнить проводку перед вызовом экспорта. Возможные варианты:

  • Задайте значение переменной члена службы с помощью отражения.
  • Напишите тестовую версию Сервиса и используйте тестовую версию файлов xml-конфигурации весны.
  • Что-то еще (чего я никогда не делал и, следовательно, не знаю).
  • 0
    Большое спасибо ! это было действительно полезно!
  • 0
    «Написать тестовую версию Сервиса» НЕТ! Затем вы тестируете код, который никогда не используется, и не тестируете код, который используется. Пустая трата времени.
Показать ещё 2 комментария
4

Вы можете использовать Mockito для инъекций для вас и избегать добавления методов setter.

@RunWith(MockitoJUnitRunner.class)
public class ExportTestNG(){

    @InjectMocks
    private ExportServiceImpl exportService;

    @Mock
    private Service serviceMock;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    public textExport(){                            
        Mockito.when(serviceMock.getData()).thenReturn("theNewPath");
        exportService.export(); 
    }
}
  • 1
    +1 Добавление сеттера, который используется только в тесте, является неприятной привычкой. :П
  • 1
    Мне нужно добавить Autowired в дополнение к InjectMocks в exportService, и это работает!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню