Я сейчас пытаюсь переехать изJunit 4
Mockito 3.2.4
чтобы (в основном) извлечь выгоду изmockStatic
и избавиться отPowerMock
Миграция прошла на удивление хорошо, пока я не пришел к тесту, имитирующему статические методы.Groovy 2.4.6
, который в настоящее время используется, не поддерживает оператор ссылки на метод::
Сейчас я пытаюсь перейти на Groovy 3.0.5, и у меня возникает проблема с открытием макетов. Вот простой код, отражающий проблему:
class Article {
Article() {
}
String getName() {
return "toto"
}
}
class ArticleManager {
private Article article
ArticleManager(Article article) {
this.article = article
}
static int getArticleCount() {
return 5
}
Article getArticleAt(int index) {
return article
}
}
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import static org.mockito.Mockito.any
import static org.mockito.Mockito.when
class MockTest {
private AutoCloseable closeable
Article article
@Mock
private ArticleManager manager
@BeforeEach
void setup() {
article = new Article()
closeable = MockitoAnnotations.openMocks(this)
}
@AfterEach
void releaseMocks() throws Exception {
closeable.close()
}
@Test
void testGroovy() {
assert article.getName() == "toto"
assert manager != null
assert manager.getArticleAt(0) == null
when(manager.getArticleAt(any(Integer.class))).thenReturn(article)
assert manager.getArticleAt(0) == article
}
}
manager.getArticleAt(0) - > java.lang.NullPointerException
when(manager.getArticleAt(any(Integer.class))).thenReturn(article)
-> Метод вызвал исключение org.mockito.exceptions.misusing.InvalidUseOfMatchersException.ArticleManager$MockitoMocks$
Я тут что-то не так делаю или есть какая-то несовместимость?
Большое тебе спасибо
Я столкнулся с тем же в своем проекте. Я думаю, что это действительно «старая проблема метакласса», также известная как mockito / mockito # 72 , и я думаю, что это снова происходит с Groovy 3.0, потому что внутренние методы больше не помечены как синтетические . Я сообщил об этом mockito / mockito № 2204 .
РЕДАКТИРОВАТЬ 2021-02-15: Я отправил запрос на перенос, чтобы исправить это. Он был принят и выпущен , поэтому попробуйте еще раз с Mockito v3.7.18.
.&
Вместо::
cfrickMockMaker SubclassByteBuddyMockMaker does not support the creation of static mocks Mockito's inline mock maker supports static mocks based on the Instrumentation API.
Я погуглил, и мне кажется, я должен использовать mockito-inline вместо mockito-core. Но когда я это делаю, у меня возникает та же проблема, что описана в моем исходном посте. Zangdar