java使用构造函数参数模拟嵌套类并测试方法
我试图模拟一个具有嵌套类的类。该嵌套类具有构造函数参数。 当我尝试使用mockito而不是mock进行测试时,实际的方法正在被执行
我在外部类上做了@injectmock,在内部类上做了@Mock
//Actual Class to test using Mockito.
public class ClassA {
public void initMethod(String s1, String s2, String s3, String s4) throws Exception {
ClassB objB = null;
if (objB == null && s3 != null && s4 != null && s2 != null) {
SampleUtil.KeyStorePasswordPair pair = SampleUtil.getKeyStorePasswordPair(s3, s4);
objB = new ClassB(s1, s2, pair.keyStore, pair.keyPassword);
try {
objB.meth1(); //Note: meth1 and meth2 are void methods.
objB.meth2(); // These two methods only to be accessed. something like doNothing
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我像往常一样尝试使用@Mock调用该类,但实际的方法meth1()正在被访问
//Somthing which I tried
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@InjectMocks
ClassA classA;
@Mock
ClassB classB;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testInitClient() throws Exception {
// Setup
// Run the test
classA.initMethod("Lorem", "Ipsum", "TestStr1", "TestStr2");
doNothing().when(classB).meth1(); // This is the line need to be mocked. But instead calling the actual method and executing
// Verify the results
}
需要模拟内部ClassB方法,而不是访问实际方法
作为mockito的初学者,我试图澄清这一点。但在访问void方法等几点上感到困惑,所以无法使用when-then。使用参数等访问构造函数
# 1 楼答案
我认为如果没有某种依赖注入,这是不可能的
在这里,我修改了您的代码,使其按照您的要求运行
这是我用来测试结果的ClassB的实现
还有测试文件
另一种更干净的解决方案是将ClassB实例传递给ClassA#initMethod