Я пытаюсь проверить свою вертикулу, но с издевательством MongoDB (чтобы не выполнять реальные действия DB во время модульного тестирования), я попытался издеваться над моим клиентом, но выглядит, когда Я использую vertx.deployVerticle()
Мои макеты не принимаются во внимание.Mocking приложение vert.x с PowerMockito
Вот пример моей тестовой установки:
@RunWith(VertxUnitRunner.class)
@PrepareForTest({ MongoClient.class })
public class VerticleTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
private Vertx vertx;
private Integer port;
@Before
public void setUp(TestContext context) throws Exception {
vertx = Vertx.vertx();
mockStatic(MongoClient.class);
MongoClient mongo = Mockito.mock(MongoClientImpl.class);
when(MongoClient.createShared(any(), any())).thenReturn(mongo);
ServerSocket socket = new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
DeploymentOptions options = new DeploymentOptions().setConfig(new JsonObject().put("http.port", port));
vertx.deployVerticle(TalWebVerticle.class.getName(), options, context.asyncAssertSuccess());
}
И то, что я на самом деле видим, что в том, что MongoClient.createShared
еще называют, хотя я дразнил его.
Что я могу сделать в этом случае?
Edit 1.
Похоже, проблема в том, что MongoClient
является интерфейс и PowerMockito не может издеваться статические методы в этом случае.
Я все еще пытаюсь найти обходное решение для этого случая.
Вы правы, потому что «MongoClient» - это интерфейс и функция, в которой интерфейс может иметь статические методы (или методы), добавленные только в Java 8. И PowerMock по-прежнему не полностью поддерживает Java 8. Но я думаю , ваша проблема может быть легко устранена. В «MainMockTransformer» проверяется, является ли класс, который модифицируется, интерфейсом, а затем пропускает методы модификации. Я думаю об обходном пути для предыдущей версии, и я исправлю это в следующей версии. –
Ничего себе, отличная новость, @ArthurZagretdinov. Тем временем я попробую 'JMockIt', есть люди, которые говорят, что это может сработать. Посмотрим ... – WhiteAngel