0

尝试使用 jmockit 存根 javax.sql.DataSource 类。有任何想法吗?

public class MyTest
{
    @MockClass(realClass = DataSource.class)
    public static class MockDataSource {
    }

    @Before
    public void setup() 
    {
        Mockit.setUpMocks(MockDataSource.class);    
    }

    @Test
    public void testCreateGetUpdateUser()
    {
        new NonStrictExpectations() 
        {
            ...     
        };
        ...
    }
}

我在eclipse中运行测试并得到这个

java.lang.IllegalArgumentException: Not a modifiable class: javax.sql.DataSource
    at mockit.internal.RedefinitionEngine.createClassReaderForRealClass(RedefinitionEngine.java:222)
    at mockit.internal.RedefinitionEngine.modifyRealClass(RedefinitionEngine.java:207)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:199)
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:193)
    at mockit.Mockit.setUpMocks(Mockit.java:274)
    at MyTest.setup(EntityManagerUTest.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:122)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:86)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
4

1 回答 1

2

我不是 jmockit 的用户(我更喜欢http://mockito.org/,这似乎更易于使用),但我认为您的 @MockClass 并不完整 - 也许您需要一个 @Mock 方法:

http://jmockit.googlecode.com/svn/trunk/www/tutorial/StateBasedTesting.html#interfaces

于 2010-11-12T17:39:55.653 回答