一些,這是猜測和炒作我的一部分,但它可能會有所幫助。你可以嘗試使用Jersey Test Framework與InMemoryTestContainerFactory
:
它始於新澤西的應用和直接調用內部API來處理由測試框架提供的客戶端創建請求。沒有涉及網絡通信。這個容器不支持servlet和其他容器相關的功能,但它是簡單單元測試的完美選擇。
它看起來像使用它,你需要做的是延長JerseyTest
,然後覆蓋getTestContainerFactory()
和遵循的其他說明,如:
public class EmployeeResourceTest extends JerseyTest {
@Override
protected Application configure() {
// set up employee resource with mock dependencies etc...
return new ResourceConfig().registerInstances(employeeResource);
}
@Test
public void getAllEmployees() {
final String response = target("getallemployees").request().get(String.class);
// assert etc...
}
}
我configure()
使用registerInstances
代替registerClasses
因爲它看起來像你可以提供一個現成的Resource
,但設置任何模擬依賴你可能需要 - 雖然我沒有嘗試過這個我自己。
測試類有點不靈活,因爲您只能在configure()
方法中一次性設置依賴關係,因此可能需要使用MockitoJUnitRunner
進行調查 - 儘管我不確定它是否可以與JerseyTest
繼承。它可以讓你做每一@Test
方法添加行爲嘲笑,例如:
@Mock
private EmployeeResourceDependency dependency;
@InjectMocks
private EmployeeResource employeeResource;
// configure() as above but without mock setup up etc...
@Test
public void getAllEmployees() {
given(dependency.getEmployees()).willReturn(...);
// etc...
但是就像我說可能不可能將他們在所有混合。
哪個傑克遜版本給你用這個?因爲Feature.INDENT_OUTPUT不被識別... – SteveSt
傑克遜版本1.9.4 –
嗯,這實際上工作:),唯一的問題是,我得到整個實體對象爲JSON字符串,它看起來像這樣:'{「rawType」 : 「的java.util.ArrayList」, 「類型」:{ 「actualTypeArguments」:[ 「dev.entities.Employee」], 「rawType」:「java.util中。列表「},」實體「:[{」idEmployee「:0,」name「:」theName「,」surname「:」theSurname「}' 而原始的json看起來像這樣: ''employee':[ {「idEmployee」:0,「name」:「theName」,「surname」:「theSurname」}' – SteveSt