我的方法类似于以下结构。
method1(Object obj,byte[] myarray)
{
mymanager.dbcall1();
mymanager2.dbcall2();
}
现在我想编写JUNIT测试用例,它可以实际模拟这些正在进行dbcalls的经理吗?最后我想比较结果。这些管理器仅在应用程序运行时可用。
答案 0 :(得分:1)
您想测试method1()
吗?如果是这样,我假设您在封闭类中有mymanager
的setter,这将使您(使用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()
结构。
干杯,
答案 1 :(得分:0)
答案 2 :(得分:0)
首先,你需要一些依赖注入。有很多方法可以实现这一目标,但这里有一个简单的方法:
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接口并在您的测试中设置此模拟实现。