是否有可能推迟测试主题的初始化,直到使用EasyMock的测试用例?

时间:2017-08-30 13:19:39

标签: java unit-testing testing mocking easymock

是否可以初始化对象以测试不在声明但在每个测试用例中?我无法在声明中初始化对象,因为传递给构造函数的参数是测试用例的一部分。我需要一些东西:

  @TestSubject
  private ClassUnderTest classUnderTest;

  @Mock
  private Collaborator mock;

  @Test
  public void test12() {
    classUnderTest = new ClassUnderTest(1, 2);
    replay(mock);
    Integer result = classUnderTest.work(3, 4);
    // Assertions
  }

但如果我这样做,Easymock会抱怨:

java.lang.NullPointerException: Have you forgotten to instantiate classUnderTest?

我已经看了MockBuilder,但在这种情况下,我不知道它可以提供什么帮助。

2 个答案:

答案 0 :(得分:0)

EasyMock不支持您要求的内容。但是,其他测试库可以/可能支持它。例如,使用JMockit:

@Test
public void test12(
    @Injectable("1") int a, @Injectable("2") int b, @Tested ClassUnderTest cut
) {
    Integer result = cut.work(3, 4);
    // Assertions
}

答案 1 :(得分:0)

当然可以!有两种方式。

在之前:

load

或旧的方式:

private ClassUnderTest classUnderTest;

private Collaborator mock;

@Before
public void before() {
  classUnderTest = new ClassUnderTest(1, 2);
  EasyMockSupport.injectMocks(this);
}

@Test
public void test12() {
  classUnderTest = new ClassUnderTest(1, 2);
  replay(mock);
  Integer result = classUnderTest.work(3, 4);
  // Assertions
}