相关疑难解决方法(0)

如何测试私有函数或具有私有方法,字段或内部类的类?

如何对具有内部私有方法,字段或嵌套类的类进行单元测试(使用xUnit)?或者通过内部链接(static在C/C++中)或在私有(匿名)命名空间中使其成为私有的函数?

为了能够运行测试而更改方法或函数的访问修饰符似乎很糟糕.

java tdd unit-testing

2593
推荐指数
36
解决办法
82万
查看次数

使用 PowerMockito 和 Mockito 测试对其他工件方法的调用

我确信这是一个很常见的问题,但我真的无法摆脱这个问题,因为我在模拟私有方法时会在内部调用另一个方法并返回一个集合。我正在测试的类有一个公共方法,它调用私有方法来获取 Collection 对象。我使用 PowerMock 创建私有方法的间谍。

public void method1(String s)
{
     Collection<Object> list = invokePrivate()
}

private Collection<Object> invokePrivate()
{
     Wrapper wrapperObj = Factory.getInstance.getWrapper();
     Collection<Object> list = wrapperObj.callWrapperMethod(); // This always calls into real method, instead of mocked version.
     return list;
}
Run Code Online (Sandbox Code Playgroud)

测试类-:

因此,为了测试公共方法“method1”,我使用 PowerMockito 创建一个间谍来监视私有方法并返回演示列表。

MainClass obj = new MainClass();
MainClass spy = PowerMockito.spy(obj);
PowerMockito.when(spy, method(MainClass.class, "inokePrivate"))
                            .thenReturn(list); // demo list which exists as a test class member.
Run Code Online (Sandbox Code Playgroud)

上面调用了私有方法,该方法又尝试调用位于不同工件中的wrapperObj.callWrapperMethod(),并在那里中断,因为它在那里找不到某些实现。所以我尝试模拟wrapperObj.callWrapperMethod。

WrapperClass wr = new WrapperClass();
WrapperClass spy1 = PowerMockito.spy(wr);
when(spy1.callWrapperMethod()).thenReturn(list) // …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing mockito powermock

5
推荐指数
1
解决办法
1366
查看次数

标签 统计

java ×2

unit-testing ×2

junit ×1

mockito ×1

powermock ×1

tdd ×1