我有类似于以下结构的方法。如何编写JUNIT测试用例进行嘲讽?
method1(Object obj,byte[] myarray)
{
mymanager.dbcall1();
mymanager2.dbcall2();
}
现在我想写JUnit测试用例这实际上可以嘲笑这些经理谁在做dbcalls?最后,我想比较的结果。这些管理器仅在应用程序运行时才可用。
我有类似于以下结构的方法。如何编写JUNIT测试用例进行嘲讽?
method1(Object obj,byte[] myarray)
{
mymanager.dbcall1();
mymanager2.dbcall2();
}
现在我想写JUnit测试用例这实际上可以嘲笑这些经理谁在做dbcalls?最后,我想比较的结果。这些管理器仅在应用程序运行时才可用。
想测试method1()
?如果是这样,我假设你有一个设置在封闭类mymanager
,这将使你(使用的Mockito):
@Before
public void setUp()
{
MyClass my = new MyClass();
MyManager mgr = mock(MyManager.class);
my.setManager(mgr);
// Similar for mymanager2
}
然后所有的方法调用mgr
只会返回null。如果您需要其他返回值,则可以使用doReturn(...).when(mgr).dbcall1()
结构。
干杯,
首先,您需要一些依赖注入。有很多方法可以做到这一点,但这里有一个简单的一个:
private I_DatabaseManager mymanager = null;
method1(Object obj,byte[] myarray)
{
getDatabaseManager().dbcall1();
getDatabaseManager().dbcall2();
}
private I_DatabaseManager getDatabaseManager() {
if (mymanager == null) {
return getProductionImplementationOfDatabaseManager();
}
return mymanager;
}
protected void setDatabaseManagerImplementation(I_DatabaseManager newImplementation) {
mymanager = newImplementation;
}
然后,在你测试代码,你可以创建一个实现I_DatabaseManager接口模拟类,并设置在测试这个模拟implementaion。
持有method1的类,它是否具有mymanager或mymanager2的getter和setter?它们在运行时如何创建? – 2013-03-14 13:17:30
由@Resource管理 – user1844840 2013-03-14 13:27:33