Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jersey测试框架中使用JMock资源_Java_Jersey_Jmock - Fatal编程技术网

Java 在Jersey测试框架中使用JMock资源

Java 在Jersey测试框架中使用JMock资源,java,jersey,jmock,Java,Jersey,Jmock,因为JerseyTest必须扩展,所以我无法将模拟资源放入Jersey的ResourceConfig中。以下代码生成NullPointerException,因为mockResource尚未初始化: @Path("/") public interface MyResource { @GET String get(); } public class MockResourceTest extends JerseyTest { @Rule public JUnitRuleMocker

因为JerseyTest必须扩展,所以我无法将模拟资源放入Jersey的ResourceConfig中。以下代码生成NullPointerException,因为mockResource尚未初始化:

@Path("/")
public interface MyResource {
    @GET String get();
}

public class MockResourceTest extends JerseyTest {
    @Rule public JUnitRuleMockery context = new JUnitRuleMockery();
    private MyResource mockResource = context.mock(MyResource.class);

    @Override
    protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
        return new GrizzlyTestContainerFactory();
    }

    @Override
    protected AppDescriptor configure() {
        DefaultResourceConfig resourceConfig = new DefaultResourceConfig();
        // FIXME: configure() is called from superclass constructor, so mockResource is still null!
        resourceConfig.getSingletons().add(mockResource);
        return new LowLevelAppDescriptor.Builder(resourceConfig).build();
    }

    @Test
    public void respondsToGetRequest() {
        context.checking(new Expectations() {{
            allowing(mockResource).get(); will(returnValue("foo"));
        }});

        String actualResponse = client().resource("http://localhost:9998/").get(String.class);
        assertThat(actualResponse, is("foo"));
    }
}

有人能找到解决这个问题的方法吗?

我将JerseyTest组合到测试类中,而不是将其子类化。请参阅我的博文:

我将JerseyTest组合到测试类中,而不是将其子类化,从而实现了这一点。请参阅我的博文:

考虑一下,我可能可以将JerseyTest代码放在自己的类中,并将其组合到测试类中。考虑一下,我可能可以将JerseyTest代码放在自己的类中,并将其组合到测试类中。您太棒了,先生。对于新版本的泽西,我们不得不做一些不同的事情,但核心理念仍然有效。谢谢!如果你有(大概是)Jersey 2的更新,欢迎在博客上发表评论。你太棒了,先生。对于新版本的泽西,我们不得不做一些不同的事情,但核心理念仍然有效。谢谢!如果你有(大概是)Jersey 2的更新,请随时在博客上发表评论。