groovy.lang.MissingMethodException с PowerMock и Дженкинс getItemByFullName - PullRequest
1 голос
/ 19 апреля 2019

Как я могу использовать PowerMockito, чтобы статический метод Jenkins возвращал мой смоделированный объект?

Я вижу, что если у меня есть тест, то Дженкинс - это пародия. Однако, если я добавлю что-то похожее на действительный PowerMockito.when для дополнительного статического метода, я получу ошибку ниже. Я в тупике.

ошибка

groovy.lang.MissingMethodException: No signature of method: 
 static jenkins.model.Jenkins.getItemByFullName() is applicable for argument types: 
 (java.lang.String) values: [job]

Possible solutions: 
  getItemByFullName(java.lang.String), 
  getItemByFullName(java.lang.String, java.lang.Class)

код

@RunWith(PowerMockRunner.class)
@PrepareForTest([Jenkins.class, Job.class])
class MyTest {
    def thisScript

    @Mock
    private Jenkins jenkins

    @Mock Job job

    MyClass myClass

    @Before
    void setUp() {
        PowerMockito.mockStatic(Jenkins.class)
        PowerMockito.when(Jenkins.getInstance()).thenReturn(jenkins)
        PowerMockito.when(Jenkins.getItemByFullName("job".toString())).thenReturn(job)

    }

1 Ответ

0 голосов
/ 19 апреля 2019

Главный упс с моей стороны. Метод getInstance является статическим, getItemByFullName не является статическим. Итак, вот исправление


@RunWith(PowerMockRunner.class)
@PrepareForTest([Jenkins.class, Job.class])
class MyTest {
    def thisScript

    @Mock
    private Jenkins jenkinsInstance

    @Mock Job job

    MyClass myClass

    @Before
    void setUp() {
        PowerMockito.mockStatic(Jenkins.class)
        PowerMockito.when(Jenkins.getInstance()).thenReturn(jenkins)
        PowerMockito.when(jenkinsInstance.getItemByFullName("job".toString())).thenReturn(job)

    }

Я должен высмеивать метод экземпляра jenkinsInstance.getItemByFullName, а не статический метод класса Jenkins.class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...