助手 class 内的 Jmockit @Mocked 未初始化

Jmockit @Mocked inside a helper class doesn't initialize

如果我有以下情况;

public class ClassA {

   public void methodA(){
    System.out.println("In ClassA, methodA");
  }
}
public class ClassB {

  public void methodB(){
  }
}

和一个 junit 测试;

@Test
public void testMocked(@Mocked final ClassB mockedB) {
    System.out.println("Mocked inline");
    new MockUp<ClassA>() {
        @Mock
        public void methodA() {
            System.out.println("Inline mockup, mockedB:" + mockedB);
        }
    };
    ClassA a = new ClassA();
    a.methodA();

}

然后当我 运行 我得到测试时;

Mocked inline
Inline mockup, mockedB:jmockitpractice.ClassB@329b0985

正如预期的那样,classB 已被模拟,并且有一个实例可用。

但是,如果我将其更改为创建一个 helper class 用于模拟,

public class MockHelper {
  @Mocked ClassB classB;
  public void setupMocks(){

    new MockUp<ClassA>() {

        @Mock
        public void methodA(){
            System.out.println("In setupMocks, classB:"+classB);
        }
    };
  }
}

junit 变为;

@Test
public void testMockedInClass() {
    System.out.println("Mocked in helper class");
    MockHelper mh = new MockHelper();
    mh.setupMocks();
    ClassA a = new ClassA();
    a.methodA();

}

我得到的结果是;

Mocked in helper class
In setupMocks, classB:null

classB没有被MockHelper里面的@Mocked初始化

我希望将所有模拟都放在一个助手 class 中,而不是必须在测试 class 中声明所有模拟。 任何想法为什么这不起作用? 谢谢。

谢谢Dom Farr,答案是继承。

public class MockHelper {

@Mocked
ClassB classB;

public void setupMocks() {

    new MockUp<ClassA>() {

        @Mock
        public void methodA() {
            System.out.println("In setupMocks, classB:" + classB);
        }
    };
}
}

和 public class mockTest 扩展 MockHelper {

@Test
public void testMockedInClass() {
    System.out.println("Mocked in helper class");
    setupMocks();
    ClassA a = new ClassA();
    a.methodA();

}

}

由于测试 class 扩展了助手,它现在可以工作了;

Mocked in helper class
In setupMocks, classB:jmockitpractice.ClassB@5d54e317