package de.codecentric.mjl.jerseytest; import javax.ws.rs.core.Context; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.mockito.internal.util.reflection.Whitebox; import com.sun.jersey.api.core.DefaultResourceConfig; import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider; import com.sun.jersey.test.framework.JerseyTest; import com.sun.jersey.test.framework.LowLevelAppDescriptor; import com.sun.jersey.test.framework.spi.container.TestContainerFactory; import com.sun.jersey.test.framework.spi.container.grizzly2.GrizzlyTestContainerFactory; import de.codecentric.mjl.jerseytest.client.TodoClient; import de.codecentric.mjl.jerseytest.exceptions.TodoNotFoundException; import de.codecentric.mjl.jerseytest.providers.NotFoundMapper; import de.codecentric.mjl.jerseytest.resources.TodoResource; import de.codecentric.mjl.jerseytest.services.TodoService; public class TodoResourceWithLowLevelContainer extends JerseyTest { public static TodoService todoServiceMock = Mockito.mock(TodoService.class); @Override public LowLevelAppDescriptor configure() { DefaultResourceConfig resourceConfig = new DefaultResourceConfig(); resourceConfig.getSingletons().add( new SingletonTypeInjectableProvider<Context, TodoService>(TodoService.class, todoServiceMock) { }); resourceConfig.getClasses().add(NotFoundMapper.class); resourceConfig.getClasses().add(TodoResource.class); return new LowLevelAppDescriptor.Builder(resourceConfig).build(); } @Override public TestContainerFactory getTestContainerFactory() { return new GrizzlyTestContainerFactory(); } @Before public void resetMocks() { // the mock is stored in a static field and must be reset manually before each test Mockito.reset(todoServiceMock); } @Test(expected = TodoNotFoundException.class) public void removeTodoShouldThrowNotFoundException() { final String todo = "test-todo"; Mockito.doThrow(new TodoNotFoundException()).when(todoServiceMock).removeTodo(todo); todoClient().removeTodo(todo); } private TodoClient todoClient() { TodoClient todoClient = new TodoClient(getBaseURI().toString()); Whitebox.setInternalState(todoClient, "client", client()); return todoClient; } }