模拟一个特定的构造函数

时间:2018-03-22 17:26:23

标签: mockito powermock powermockito

mockito-1.10.19
powermock-的Mockito-1.7.1
powermock-1.7.4
junit 4.12

我有一个具有多个构造函数(java)的类。一旦构造函数调用另一个。我想只模拟其中一个构造函数(从另一个构造函数调用的构造函数)。不幸的是我无法更改代码 - 我只是在测试它。这是要测试的类:

import java.io.File;
import java.sql.connection;

public class Foo {
    public Foo (Connection connection){
        this(connection, new File ());
    }
    public Foo (Connection connection, File file){
       // do stuff
    }
    // other methods
}

这是我写的测试课:

import java.io.File;
import java.sql.connection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.legacy.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
@PowerMockIgnore("javax.management.*")
public class FooTest {

    @Test
    public void testFoo() throws Exception {
        Connection mockConnection = Mockito.mock(Connection.class);
        Foo fooObj = Mockito.mock(Foo.class);
        PowerMockito.whenNew(Foo.class).withArguments(Matchers.notNull(), Matchers.notNull()).thenReturn(fooObj);

        Foo newFooObj = new Foo (mockConnection);
        assertNotNull ("newFooObj should not be null", newFooObj);
    }
}

问题是没有输入Foo(连接)。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

我使用最新的1.7.x版本的Powermock(1.7.4)尝试了您的代码,它可以按照您的需要运行。所以你可能只需要升级一些次要版本。