我正在尝试使用
原则测试Android应用出于这个原因,我希望仅依靠JUnit和Mockito进行测试,而不是冒着滥用PowerMockito框架的风险
但是,在这种情况下测试公共方法时,我处于失速状态
public class ClassA {
public void publicMethod(String id) {
// something
privateMethod(id);
}
public void privateMethod(String id) {
// something
StaticClass.staticMethod(id);
}
}
因为在这里我可以为publicMethod写一个测试,但后来我面对了问题
答案 0 :(得分:2)
解决方案是:
@Before
方法中的模拟包装类调用SUT的构造函数。这符合OOP封装原则(BTW静态类可以破解)。例如:
class WrappedStaticClass {
void wrappedStaticMethod() {
StaticClass.staticMethod();
}
}
您重构的ClassA
现在看起来像这样:
public class ClassA {
private final WrappedStaticClass wrappedStaticClass;
public ClassA(WrappedStaticClass wrappedStaticClass) {
this.wrappedStaticClass = wrappedStaticClass;
}
public void publicMethod(String id) {
// something
privateMethod(id);
}
private void privateMethod(String id) {
// something
wrappedStaticClass.wrappedStaticMethod(id);
}
}
您的测试现在看起来像这样:
@Mock WrappedStaticClass mockWrappedStaticClass;
//system under test
ClassA classA;
@Before
public void setUp() {
MockitoAnnotations.init(this);
classA = new ClassA(mockWrappedStaticClass);
}
@Test
public void testCallsWrappedStaticClass() {
//act
classA.publicMethod(1);
//assert
verify(mockWrappedStaticClass).wrappedStaticMethod();
}