【问题标题】:Mock a specific constructor模拟特定的构造函数
【发布时间】:2018-03-22 17:26:22
【问题描述】:

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

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

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(Connection)。有什么我遗漏的吗?

【问题讨论】:

    标签: mockito powermock powermockito


    【解决方案1】:

    我使用最新的 1.7.x 版本的 Powermock (1.7.4) 尝试了您的代码,它可以按照您的意愿工作。所以你可能只需要升级几个小版本。

    【讨论】:

    • 更新了 powermock 但仍然没有骰子!仍然没有进入单参数构造函数:(
    • 奇怪,因为我确实观察到了错误和修复。我的代码中唯一的区别是我使用了notNull() 匹配器(不带参数)。您还应该仔细检查您的依赖项管理器(maven、gradle 等)是否没有引入更新版本的 PowerMock。 PowerMock 2.x 版本是从具有您所看到的错误的代码的早期版本分支而来的。
    • 感谢您的帮助@goolie。我手动使用 Powermock 的东西,所有版本都是 1.7.4。我将我的更改为 Matchers.notNull()。还是没有通过。我会继续寻找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2013-09-03
    • 1970-01-01
    • 2014-03-27
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多