2014-06-25 20 views
0

我有一些奇怪的代码,这样与抑制子方法和构造

B param = ...; 

D main(){ 
    return A.method(param, C.class, new String[]{"abc"}, new SomeClass()).get(); 
} 

其中

public static A method(...) 
public D get() 

我怎么能嘲笑方法的main(),以抑制子方法调用需要在单元测试的建议和抑制构建对象?

我需要的get()

+0

据我所知,Java不允许以“内联”方法调用。你当然可以自己修改代码。但是编译器不能使用编译器指令自动重写代码。 –

回答

0
从一个更好的设计方法是注入实例到方法,而不是创建它们

除了模拟结果,你可以使用Powermock嘲笑构造函数调用,从而以新的呼叫将实际创建模拟对象。

这里是powermock对模拟构造教程,mockitto

http://code.google.com/p/powermock/wiki/MockitoUsage13

在您的测试,你将能够说:

SomeClass myMock = mock(SomeClass.class); 
whenNew(SomeClass.class).withNoArguments().thenReturn(myMock) 
+0

但方法'方法'是静态的。 – barbara

+0

如果你正在模拟对'New SomeClass'的调用,那么在调用静态方法之前发生这种情况我不认为这很重要。然而,powermock可以与静力学一起使用,请阅读我链接到的powermock教程,以便了解如何。 – dkatzel

+0

对我来说这是行不通的,因为构造函数A被调用并且我得到了NPE。 – barbara