2017-03-09 68 views
0

我是vert.x新手,决定开始使用light,但无法获得简单的单元测试(使用maven构建)。代码如下Vert.x单元测试不执行

FileRepo.java:

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.Future; 
import io.vertx.core.http.HttpServer; 
import io.vertx.core.http.HttpServerResponse; 
import io.vertx.ext.web.Router; 

public class FileRepo extends AbstractVerticle { 
    @Override 
    public void start(Future<Void> fut) { 
    HttpServer server = vertx.createHttpServer(); 
    Router router = Router.router(vertx); 
    router.route("/upload").handler(routingContext -> { 
     HttpServerResponse response = routingContext.response(); 
     response.putHeader("content-type", "text/plain"); 
     response.end("Hello world!"); 
    }); 
    System.out.println("Starting server!"); 
    server.requestHandler(router::accept).listen(8080); 
    System.out.println("Server started!"); 
    } 
} 

FileRepoTest.java:

import FileRepo; 
import io.vertx.core.Vertx; 
import io.vertx.ext.unit.TestContext; 
import io.vertx.ext.unit.junit.VertxUnitRunner; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

@RunWith(VertxUnitRunner.class) 
public class FileRepoTest { 
    private Vertx vertx; 

    @Before 
    public void setUp(TestContext context) { 
    vertx = Vertx.vertx(); 
    System.out.println("SetUp Vertx"); 
    vertx.deployVerticle(FileRepo.class.getName(), context.asyncAssertSuccess()); 
    System.out.println("SetUp done"); 
    } 

    @After 
    public void tearDown(TestContext context) { 
    System.out.println("tearDown Vertx"); 
    vertx.close(context.asyncAssertSuccess()); 
    } 

    @Test 
    public void testUpload(TestContext context) { 
    System.out.println("testUpload"); 
    } 
} 

结果:

SetUp Vertx 
SetUp done 
Starting server! 
Server started! 
tearDown Vertx 

java.util.concurrent.TimeoutException 
    at io.vertx.ext.unit.impl.TestContextImpl$Step.lambda$run$0(TestContextImpl.java:112) 
    at java.lang.Thread.run(Thread.java:745) 

Process finished with exit code -1 

浏览http://localhost:8080/upload等待TimeoutException显示Hello World!页面,但@Test似乎从未执行。我在这里做错了什么?

问候, 马蒂亚斯

回答

2

你所得到的例外是因为没有服务器启动状态的确认。

您Verticle更改为以下几点:

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.Future; 
import io.vertx.core.http.HttpServerResponse; 
import io.vertx.ext.web.Router; 

public class FileRepo extends AbstractVerticle { 
    @Override 
    public void start(Future<Void> fut) { 
     Router router = Router.router(vertx); 
     router.route("/upload").handler(routingContext -> { 
      HttpServerResponse response = routingContext.response(); 
      response.putHeader("content-type", "text/plain"); 
      response.end("Hello world!"); 
     }); 
     System.out.println("Starting server!"); 
     vertx.createHttpServer() 
       .requestHandler(router::accept) 
       .listen(8080, result -> { 
        if (result.succeeded()) { 
         System.out.println("Server started!"); 
         fut.complete(); 
        } else { 
         System.out.println("Server start failed!"); 
         fut.fail(result.cause()); 
        } 
       }); 
    } 
} 
+0

那么明显,咫尺天涯:)非常感谢。 – MattiasH