在测试中更改final类的返回值



有人知道如何在最后一个类中改变方法的返回值吗?

我试图测试ToBeTested类,我想得到true作为结果。我试图使用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类中的字段。所以没有办法改变实现的类本身。

使用JMockit工具,测试将是这样的:

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

隐藏接口后面的静态依赖项。模拟接口

因为你不想在你的类上有一个字段,简单地将接口作为方法参数传递(或者通过工厂获得一个实例,只是不要使用紧耦合)

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);
    }
}

相关内容

  • 没有找到相关文章

最新更新