如果 APIs 裡面用了大量過濾器、constraint,一般的單元測試很難一併測試,Jersey 提供了測試框架就可以很容易一起測試。 其實就是跑一個伺服器起來去呼叫 API。
// build.gradle
dependencies {
testCompile (
'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:2.27'
)
}
因為我用 Junit5,所以需要稍微調整一下。
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class ResourceTest extends JerseyTest {
@Override
protected Application configure() {
enable(TestProperties.DUMP_ENTITY);
enable(TestProperties.LOG_TRAFFIC);
return new ResourceConfig(HelloResource.class);
}
@Override
@BeforeEach
public void setUp() throws Exception {
// patch junit4
super.setUp();
}
@Override
@AfterEach
public void tearDown() throws Exception {
// patch junit4
super.tearDown();
}
@Test
void test() {
Response response = target().path("/hello").request().get();
Assertions.assertEquals(200, response.getStatus());
}
}
參考資料: