Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Apache 使用wicket进行单元测试时,如何设置自定义会话?_Apache_Unit Testing_Junit_Wicket - Fatal编程技术网

Apache 使用wicket进行单元测试时,如何设置自定义会话?

Apache 使用wicket进行单元测试时,如何设置自定义会话?,apache,unit-testing,junit,wicket,Apache,Unit Testing,Junit,Wicket,我正在尝试在wicket页面上运行一些单元测试,该页面只允许在您登录后进行访问。在JUnit测试中,如果不设置会话,我无法启动页面或呈现页面 如何设置会话?我找不到任何关于如何执行此操作的文档 WicketTester tester = new WicketTester(new MyApp()); ((MyCustomSession)tester.getWicketSession()).setItem(MyFactory.getItem("abc")); //Fails to star

我正在尝试在wicket页面上运行一些单元测试,该页面只允许在您登录后进行访问。在JUnit测试中,如果不设置会话,我无法启动页面或呈现页面

如何设置会话?我找不到任何关于如何执行此操作的文档

    WicketTester tester = new WicketTester(new MyApp());
((MyCustomSession)tester.getWicketSession()).setItem(MyFactory.getItem("abc"));

//Fails to start below, no session seems to be set
    tester.startPage(General.class);
tester.assertRenderedPage(General.class);
你可能会遇到麻烦。否则你做的看起来很好。例如,我有一个Junit4安装方法,它看起来像:

@Before
public void createTester() {
    tester = new WicketTester( new MyApp() );
    // see http://issues.apache.org/jira/browse/WICKET-1215
    tester.setupRequestAndResponse();
    MyAppSession session = (MyAppSession) tester.getWicketSession();
    session.setLocale(Locale.CANADA);
    session.setUser(...);
}

我经常做的是为我想要模拟或存根的东西提供一个带有覆盖的假WebApplication

我覆盖的内容之一是方法

    public abstract Session newSession(Request request, Response response);
这允许您返回一个包含任何内容的假会话设置

这在Wicket 1.3中—如果您使用的是1.4,其中一些可能已经更改,正如在另一个响应中所指出的,它可能与Wicket bug有关


但是,假设接口没有太大变化,重写此方法也可能是解决WICKET-1215中问题的另一种方法。

使用WICKET 1.4,我使用我的普通Web应用程序和WebSession实现,在我的应用程序中称为NewEditor和NewSession。我覆盖newSession,在newSession中,我的操作与常规应用程序代码中的相同,只是我立即登录。出于性能原因,我还重写了newSessionStore,我从Wicketters代码中复制了这个技巧

tester = new WicketTester(new NewtEditor() 
{
    @Override
    public Session newSession(Request request, Response response)
    {
        NewtSession session = new NewtSession(request);
        session.signIn(getTestDao());
        return session;
    }

    @Override
    protected ISessionStore newSessionStore()
    {
        // Copied from WicketTester: Don't use a filestore, or we spawn lots of threads,
        // which makes things slow.
        return new HttpSessionStore(this);
    }
});

我以前也使用过这种方法在测试期间提供自定义会话。