2011-06-04 131 views
5

我想用JUnit测试我的REST服务器。每个测试都会向服务器发送HTTP请求,并根据预期在响应中出现的元素列表来检查响应。JUnit测试服务器

因此,在测试过程如下所示:

 
for each request in test requests 
    send request and receive response 
    assert the response is ok 
    for each element in the expected elements 
     test if the element exists in the response

你将如何与JUnit实现它?

回答

6

我会在您的JUnit类中使用@BeforeClass方法来获取最新版本的服务器并启动它(选择适当的端口等)。同样可以使用@AfterClass以编程方式关闭服务器。自动执行此操作非常重要,否则您必须记住要让服务器的最新版本持续运行。

我假定测试不会更改服务器中的任何数据。如果他们这样做,那么你应该使用@Before@After,但请记住,这将导致你的服务器启动/停止每个测试,并可能使测试花费不合理的时间过长。

一旦你有了这个框架,编写测试本身应该很简单。

您也可以通过确保您的RESTful API仅作为普通的Java API公开,将其作为一个“适当的”单元测试来编写,这与纯粹的网络层隔离。这将运行得更快,并且(希望如果您的网络层足够薄)可以获得大部分相同的可能错误。

+2

只是更加挑剔:OP当然没有提到他想要做的是*“单元测试”*。他只是提到JUnit可以用于单元测试和其他类型的测试:) – SyntaxT3rr0r 2011-06-04 21:00:26

+1

好点,我已经摆脱了 – 2011-06-05 05:23:28