我在测试的类中有以下字段:
class ClassUnderTest {
@Context
public javax.ws.rs.core.SecurityContext securityContext;
public void someMethod() {
securityContext.getUserPrinciple(); // securityContext is always null here - never mocked
}
}
但是我无法让JMockit使用期望值或MockUp方法来模拟它,在这两种情况下,被测试的类中的securityContext始终为null?
@Test
public void usingExpectations() {
new Expectations() {
@Mocked
SecurityContext mockSecurityContext;
@Mocked
Principal mockPrinciple;
{
mockSecurityContext.getUserPrincipal();
result = mockPrinciple;
mockPrinciple.getName();
result = username;
}
};
new ClassUnderTest().someMethod();
}
@Test
public using usingMockUp() {
new MockUp<SecurityContext>() {
@Mock
Principle getUserPrincipal() {
// return something
};
}
new ClassUnderTest().someMethod();
}
最佳答案
您的测试代码没有做任何事情来设置securityContext
字段,因此它保持为空。
不过,JMockit具有此功能。您可以通过调用Deencapsulation.setField(...)
显式设置字段,或者让JMockit通过使用@Tested
和@Injectable
注释自动进行设置。有关详细信息和示例,请检查documentation。