我在测试的类中有以下字段:
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(...)
显式设置该字段,也可以使用 @Tested
和 @Injectable
注释让 JMockit 自动执行此操作。详细信息和示例请查看documentation .
关于java - 可以在 JMockit 中模拟用 @Context 注释的字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24486965/