我的单元测试有一些奇怪的行为。
我的简单页面如下:
public class RegistrationPage extends BasePage {
public RegistrationPage(IModel<Service> model) {
isUserLoggedIn();
add(new RegistrationPanel("registration", model));
}
public RegistrationPage() {
isUserLoggedIn();
}
/**
* Checks if a user is logged in.
* If not, the user will be redirected to the LoginPage.
*
*/
public void isUserLoggedIn() {
if (!getSession().isSignedIn()) {
// redirectToInterceptPage(new LoginPage());
setResponsePage(new LoginPage());
}
}
}
现在我想在2个简单的测试中测试这个页面: 首先,我想检查如果没有用户登录,页面是否呈现:
@Test
public void testRegistrationPage() {
wicketTester.startPage(RegistrationPage.class);
// it will redirect to the LoginPage
wicketTester.assertRenderedPage(LoginPage.class);
}
我希望测试能通过。正确!由于我的isUserLoggedIn()方法,它被识别为没有用户登录,因此它将被重定向到LoginPage。
现在重点是我想用模型检查我的RegistrationPage。好的,接下来的测试:
@Test
public void testRegistrationPage() {
wicketTester.startPage(new RegistrationPage(new Model<Service>(new Service("test", "test", "test"))));
// it will redirect to the LoginPage
wicketTester.assertRenderedPage(LoginPage.class);
}
我的期望是什么?我在预期的测试中也是如此。这意味着应该呈现LoginPage ......但它不是!
junit.framework.AssertionFailedError:类不一样,预期'class LoginPage',当前'class RegistrationPage'
看起来startPage(Page page)方法创建并使用有效会话。 但我的会话只接受具有管理员/管理员凭据的用户。
这两个startPage(..)方法(类,页面)有什么区别?这有点奇怪,同样的测试只有一个区别:使用模型。然后就失败了。
有人可以提供建议吗?
修改
在我的会话中,我使用SpringSecurity通过ldap进行身份验证。但在我的测试用例中,我有一个包含2个硬编码用户的存储库。 admin / admin和user / user。但我认为如果有人正确认证,会话只会被解决。我不在我的测试用例中进行身份验证。那么为什么会有“认证”会话?!