小编dim*_*ime的帖子

如何调用抽象类的私有构造函数进行模拟.

关于如何正确测试此代码,我遇到了一些问题.我希望能够使用Mocking框架或甚至反射来模拟对delegateForFoo的调用.但是,当我尝试通过反射或通过PowerMock执行此操作时,我会收到如下代码中所示的错误.

@Test
public void testDelegatedMethodWithPowerMock() throws Exception {

    DelegateForFoo mockedDelegateForFoo = PowerMock
            .createMock(DelegateForFoo.class);

    Foo foo = Whitebox.invokeConstructor(Foo.class, mockedDelegateForFoo);
    // org.powermock.reflect.exceptions.ConstructorNotFoundException: Failed
    // to find a constructor with parameter types: at line above.

    Constructor<Foo> fooConstructor = Foo.class
            .getDeclaredConstructor(DelegateForFoo.class);
    fooConstructor.setAccessible(true);
    Foo foo2 = fooConstructor.newInstance(mockedDelegateForFoo);
    // java.lang.InstantiationException at line above.

}
Run Code Online (Sandbox Code Playgroud)

我尽力检查以前的stackOverflow问题,但我没有看到直接解决此问题的问题.关于如何调用具体类的私有构造函数有一些答案,还有一些关于如何在抽象类上调用私有方法的答案,但在这个特定实例上没有.

我的官方问题如下:有没有办法调用抽象类的私有构造函数并传入一个模拟对象用于测试目的.

我知道通常你不应该测试私有方法等.但是在这种情况下,我想测试一个有正当理由是私有的构造函数.Bar根本没有理由知道关于委托的任何事情,如果要进行适当的封装,它应该是私有的.提前致谢.

我正在使用的代码如下.

public abstract class Foo {

    private DelegateForFoo delegateForFoo;
    private int valueToBeSetFromDelegate;

    Foo() {
        // I don't want the subclasses to do anything with this DelegateForFoo.
        // It's set …
Run Code Online (Sandbox Code Playgroud)

java reflection unit-testing easymock powermock

4
推荐指数
1
解决办法
2671
查看次数

A在序列A中代表什么?

什么是sequenceA从Traversable的立场?为什么最后有资本A?我已经学习了几个月的Haskell,这是困扰我一段时间的事情之一.

haskell naming-conventions traversable

4
推荐指数
1
解决办法
170
查看次数