【发布时间】:2018-10-27 02:08:30
【问题描述】:
我想知道我是否可以模拟超类构造函数调用及其 super() 调用。
例如,我有以下类
class A
{
A(..)
{
super(..)
}
}
class B extends A
{
B(C c)
{
super(c)
}
}
所以,我打算对 B 类中的一些方法进行单元测试,但是在创建实例时,它确实调用了超类构造函数,这使得编写单元测试变得困难。那么,我怎样才能模拟所有的超类构造函数调用。我还想模拟 A 类中的一些方法,以便它返回一些我需要的值。
谢谢!!
【问题讨论】:
-
是什么确切地使测试 B 变得困难?它调用超类构造函数的事实本质上没有问题。您应该尝试模拟 依赖项,而不是对象本身的行为。
-
我讨论suppressing ctors using PowerMock with EasyMock in this blog post,我没有 Mockito 版本。不过,尚不清楚您是要消除 ctor 还是替换它。
-
@Jon Skeet。是的,我确实理解这一点,但为了实现这一点,它非常复杂,并在后台启动多个线程,调用我的单元测试不需要的许多外部依赖项。
-
那么您应该注入这些依赖项,而不是在超级构造函数中创建它们。这就是重点。
标签: java junit guice mockito jmock