0

有人知道如何更改最终类中方法的返回值吗?

我正在尝试测试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。所以没有办法改变实现的类本身。

4

2 回答 2

1

使用 JMockit 工具,测试将如下所示:

@Test
public void doSomething(@Mocked ToBeChanged mock)
{
    new NonStrictExpectations() {{ ToBeChanged.changeMyBehaviour(); result = true; }};

    boolean res = new ToBeTested().doSomething();

    assertTrue(res);
}
于 2013-03-22T14:21:55.060 回答
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);
    }
}
于 2013-03-22T15:06:12.647 回答