我正在使用 testng 和 Mockito2 为项目编写模块测试。我想模拟一些发出出站请求的方法。现在,要模拟的对象是在另一个对象的方法中本地创建的。所以,如果我说 4 个类,A、B、C 和 D,这样 A 创建 B 类型的对象,B 创建 C 类型的对象,依此类推,D 类型的对象要被模拟,我看到我有两个选择来模拟它。
选项 1 是监视 A、B、C 类型的对象,并将 B 的间谍注入 A 和 C 注入 B,最后在对象创建期间将 D 的模拟注入 C。下面是一个例子。
class A {
public B createB()
{
retrun new B();
}
public void someMethod ()
{
B b = createB();
}
}
通过这种方式,我可以在调用 createB 时监视 A 并为 B 注入模拟对象。这样我最终可以模拟 D。
选项 2 是不模拟间歇性课程,而是直接拥有一个工厂类,如下所示:
class DFactory {
private static D d;
static public void setD (D newD)
{
d = newD;
}
public static D getD()
{
if (d!=null)
{
return d;
} else
{
return new D();
}
}
}
上面的选项很简单,但我不确定这是否是正确的做法,因为它创建了更多静态方法,我相信应该避免这种情况。
我想知道应该首选哪种方法以及是否有其他替代方法。
请注意,我不希望使用 powermockito 或任何其他鼓励糟糕代码设计的框架。我想坚持使用mockito2。我可以重构我的代码以使其更具可测试性。