有人知道如何更改最终类中方法的返回值。
我正在尝试测试ToBeTested
类,我希望结果是真的。
我尝试使用Powermockito
但未找到解决方案。
public final class ToBeChanged {
public static boolean changeMyBehaviour() {
return false;
}
}
public class ToBeTested {
public boolean doSomething () {
if (ToBeChanged.changeMyBehaviour)
return false;
else
return true;
}
}
我不想将ToBeChanged
类声明为ToBeTested
类中的字段。
所以没有办法改变实现的类本身。
答案 0 :(得分:1)
使用JMockit工具,测试将是这样的:
@Test
public void doSomething(@Mocked ToBeChanged mock)
{
new NonStrictExpectations() {{ ToBeChanged.changeMyBehaviour(); result = true; }};
boolean res = new ToBeTested().doSomething();
assertTrue(res);
}
答案 1 :(得分:1)
隐藏接口背后的静态依赖项。模拟界面。
由于您不希望在类上有字段,只需将接口作为方法参数传递(或者通过工厂获取实例,只是不要使用紧耦合)
public final class ToBeChanged {
public static boolean changeMyBehaviour() {
return false;
}
}
public interface MyInterface {
boolean changeMyBehaviour();
}
public class MyInterfaceImpl implements MyInterface {
@Override
public boolean changeMyBehaviour() {
return ToBeChanged.changeMyBehaviour();
}
}
class ToBeTested {
public boolean doSomething (MyInterface myInterface) {
return !myInterface.changeMyBehaviour();
}
}
class TheTest {
@Test
public void testSomething() {
MyInterface myMock = mock(MyInterface.class);
when(myMock.changeMyBehaviour()).thenReturn(true);
new ToBeTested().doSomething(myMock);
}
}