1

我正在尝试将 AbstractShiroTest 抽象类用于我的单元测试,如http://shiro.apache.org/testing.html中所述 我有我的测试类:

public class BeanTest extends AbstractShiroTest {
...
@Test
public void testShiro() {
    Subject subjectUnderTest = createNiceMock(Subject.class);
    expect(subjectUnderTest.isAuthenticated()).andReturn(true);
    expect(subjectUnderTest.getPrincipal()).andReturn("cenap");
    setSubject(subjectUnderTest);
    assertTrue("Subject is not authenticated", SecurityUtils.getSubject().isAuthenticated());
    assertNotNull("Subject principle null", SecurityUtils.getSubject().getPrincipal());
}

@AfterClass
public static void tearDownClass() {  
    tearDownShiro();
} 

两个断言都失败了... SecurityUtils.getSubject() 返回某个对象,但该对象的 isAuthenticated() 方法返回 false 并且 getPrincipal() 方法返回 null。“期望”子句似乎不起作用。我错过了什么?

4

1 回答 1

1

回答我自己的问题,因为它可能对某人有所帮助。这是一个愚蠢的错误......诀窍是:不要忘记添加

任何时候();

在你的期望声明之后,所以不要忘记打电话

重播(被试对象);

在那之后!

所以你的 BeforeClass 方法应该是这样的:

@BeforeClass
public static void setUpShiro() {
    Subject subjectUnderTest = createNiceMock(Subject.class);
    expect(subjectUnderTest.isAuthenticated()).andReturn(true).anyTimes();
    expect(subjectUnderTest.getPrincipal()).andReturn(Admin).anyTimes();
    setSubject(subjectUnderTest);        
    replay (subjectUnderTest);        
}
于 2013-09-08T12:21:50.310 回答