2013-05-13 65 views
0

我正在写我的项目的单元测试HTTP THREADPOOLED WEB SERVER。为此我正在使用Junit in Maven为什么WebServer项目的单元测试显示奇怪的行为?

这其间,我停留在一个地方,并怀疑如下,

  1. 有一个名为WebServer的,其任务是启动服务器一类,使得线程池,并启动在端口上监听客户端请求。当我为此创建一个线程时,在Test类中的注释@BeforeClass下,它预计会等待客户端请求,但它显示Test将完成。

    公共类WebServerTest {

    @BeforeClass 
    public static void webserverStarter() { 
        System.out.println("Before Class : webserverStarter"); 
        new Thread(new WebServer()).start(); 
    } 
    
    @AfterClass 
    public static void webserverCleanup() { 
        System.out.println("After Class : webserverStarter"); 
    } 
    

    }

我不明白为什么这不是等待客户端的请求。请帮我编写用于测试HTTP Threadpooled WebServer的单元测试。

回答

0

@Before在每个测试之前执行。如果你想使用一个Web服务器,只需创建一个对象!

+0

但是,请让我为什么它成功地出来了,当在WebServer类中,有一个虚假循环,其中服务器正在接受客户端请求。 它不应该从web服务器类正常出来。 – devsda 2013-05-13 09:19:19

+0

这是在无穷循环'client_socket = serversocket.accept();'的指令。告诉我如何接受客户端请求?是否有任何方法,以便我可以通过任何其他InputStream资源文件夹中的任何文件替换此套接字。 – devsda 2013-05-13 09:22:11

0

如果您确定webserverStarter()实际启动服务器,毫无疑问服务器将工作。不要担心注释@BeforeClass。它只意味着它只会被调用一次,同样的事情适用于@AfterClass。

我怀疑的是,如果你的服务器实际启动了,并且你确定,可能是服务器在启动成功后或者在测试用例成功结束后立即关闭的。在使用嵌入式Tomcat服务器时,我必须告诉服务器像这样连续运行。

tomcat.start();  
tomcat.getServer().await(); 
+0

你能解释最后一行吗? – devsda 2013-05-13 09:55:52

+0

嵌入式Tomcat是用于测试的服务器。例如,http://java.dzone.com/articles/embedded-tomcat-minimal tomcat.start();将启动服务器,但你必须说tomcat.getServer()。await();连续运行。 – Mawia 2013-05-13 10:00:28

+0

我想澄清的一件事是,我制作了自己的服务器,仅用于学习多线程,套接字概念。 – devsda 2013-05-13 10:05:32

相关问题