java - 可以在 JMockit 中模拟用 @Context 注释的字段吗?

标签 java jmockit

我在测试的类中有以下字段:

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/

相关文章:

java - 如何替换对被测试类的私有(private)方法的调用

java - JMockit - 期望返回旧值而不是与私有(private)字段关联的值

java - 如何在 junit 测试我的类(class)时抛出 `InterruptedException`?

java - JTable/JScroll 隐藏行和 JTable

java - @RequiredArgsConstructor 不生成构造函数

java - 从文本文件中获取值,然后将它们放入没有重复项的列表中?

java - 测试类中没有可以由可用注入(inject)满足的构造函数

java - 是一个从方法声明中添加javadoc注释的工具

Javafx)应用程序正在泄漏内存

code-coverage - java.lang.IllegalStateException : JMockit wasn't properly initialized; check that jmockit. jar 在类路径中位于 junit.jar 之前