辅助类中的Jmockit @Mocked并没有初始化

时间:2016-03-11 11:54:23

标签: java unit-testing jmockit

如果我有以下内容;

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是Mocked,并且有一个实例。

但是,如果我改变它来创建一个用于模拟的辅助类,

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初始化

我想在一个帮助器类中进行所有的模拟,而不是必须在测试类中声明所有的模拟。 任何想法为什么这不起作用? 感谢。

1 个答案:

答案 0 :(得分:0)

感谢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);
        }
    };
}
}

和     公共类mockTest扩展了MockHelper {

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

}

}

当测试类扩展帮助程序时,它现在可以工作;

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