私はverticleをテストしようとしていますが、MongoDBを使っています(単体テストの過程で実際のDBアクションを実行しないようにしています)、私はクライアントをモックしようとしましたが、私はvertx.deployVerticle()
を使用しています。私のモックは考慮されていません。私はそれを嘲笑しましたけれどもPowerMockitoでvert.xアプリケーションをモックする
@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
がまだ呼び出されていることである。
は、ここに私のテスト・セットアップの例です。
この場合、私は何ができますか?問題はMongoClient
がとPowerMockitoこの場合の静的メソッドを模擬することができないインターフェースであることであるよう
編集1
が見えます。
私はまだこのケースの回避策を見つけようとしています。
「MongoClient」はインタフェースであり、静的メソッド(またはメソッド)がJava 8にのみ追加されている可能性があるためです.PowerMockはまだJava 8を完全にサポートしていません。あなたの問題は簡単に修正できます。 'MainMockTransformer'は、変更されているクラスがインタフェースであるかどうかをチェックし、メソッドをスキップします。以前のバージョンの回避策について考えています。次のリリースで修正するつもりです。 –
うわー、素晴らしいニュース、@ArthurZagretdinov。私は 'JMockIt 'を試してみると、それは働くかもしれないと言っている人がいる。私達は見るでしょう... – WhiteAngel