jmockit / jmockit1

Advanced Java library for integration testing, mocking, faking, and code coverage
Other
461 stars 239 forks source link

SpringJUnit4ClassRunner.createTest() is called twice. #160

Closed m15o closed 9 years ago

m15o commented 9 years ago

When I use jmockit with SpringJUnit4ClassRunner, somehow createTest() is called twice. It causes initialization issue to some TestExecutionListener.

This is a example test case to reproduce this issue.

import mockit.Invocation;
import mockit.Mock;
import mockit.MockUp;

import org.junit.Ignore;

public class Test {
    @Ignore
    public static class BlockJUnit4ClassRunner {
        void createTest() {
            System.out.println("BlockJUnit4ClassRunner.createTest()");
        }
    }

    @Ignore
    public static class SpringJUnit4ClassRunner extends BlockJUnit4ClassRunner {
        @Override
        void createTest() {
            System.out.println("SpringJUnit4ClassRunner.createTest()");
            super.createTest();
        }
    }

    public static class BlockJUnit4ClassRunnerDecorator extends MockUp<BlockJUnit4ClassRunner> {
        @Mock
        public void createTest(Invocation invocation){
            System.out.println("BlockJUnit4ClassRunnerDecorator.createTest()");
            invocation.proceed();
        }
    }

    @org.junit.Test
    public void test() {
        new BlockJUnit4ClassRunnerDecorator();
        new SpringJUnit4ClassRunner().createTest();
    }
}

output

SpringJUnit4ClassRunner.createTest()
BlockJUnit4ClassRunnerDecorator.createTest()
SpringJUnit4ClassRunner.createTest()
BlockJUnit4ClassRunner.createTest()
rliesenfeld commented 9 years ago

Thanks for the report.