我正在嘗試爲RESTeasy Web服務編寫JUnit測試用例。我想爲此使用RESTeasy MockDispatcherFactory,並不依賴於任何數據訪問層。帶有模擬數據層的JUnit RESTeasy服務......我該如何嘲笑它?
在我以前的測試案例的創作中,我用的Mockito嘲笑數據訪問,但我有麻煩RestEasy的的MockDispatcherFactory這樣做......
服務類:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("")
public class Service {
private StubDao stubDao;
public Service(){
this.stubDao = new StubDao();
}
public Service (StubDao stubDao){
this.stubDao = stubDao;
}
@GET
@Produces(MediaType.TEXT_HTML)
public String get(){
return stubDao.getTheValue();
}
}
數據訪問:
public class StubDao {
private String value;
public StubDao(){
}
public String getTheValue(){
//Stubbed Data Access
return value;
}
public void setTheValue(String v){
this.value = v;
}
}
單元測試:
import java.net.URISyntaxException;
import junit.framework.Assert;
import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory;
import org.junit.Test;
public class TestService {
@Test
public void testService() throws URISyntaxException{
POJOResourceFactory factory = new POJOResourceFactory(Service.class);
//I Need to use Mockito to mock the StubDao object!!!
Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
dispatcher.getRegistry().addResourceFactory(factory);
MockHttpRequest request = MockHttpRequest.get("");
MockHttpResponse response = new MockHttpResponse();
//here my exception is thrown
dispatcher.invoke(request, response);
System.out.println(response.getContentAsString());
// but I expect the response to be 404 (which works outside the mock setup
Assert.assertEquals(response.getStatus(), 404);
}
}
通常我會使用的Mockito嘲笑像這樣的數據訪問:
設置模擬
@Before
public void setup() {
StubDao stubDao = new StubDao();
}
定義模擬
when(stubDao.getTheValue()).thenReturn("the mocked value");
然而,RestEasy的的嘲諷創建一個新的實例內部的服務類。我的問題是,如何將模擬數據訪問插入到服務的構造函數中?
任何幫助表示讚賞!