繁体   English   中英

如何在 Java 中使用 Mockito 存根方法

[英]How to stub method using Mockito in java

我有一个实现接口 I 的单例类 S。单例类有一个方法 A,它反过来调用方法 B。我必须测试方法 A。

这是我的单身课程

        public class S implements I{
           private static S INSTANCE = new S();

           public static I getInstance(){
             return INSTANCE;
           }

           public String methodA(){
              methodB();
           }
         }

这就是我的方法在测试类中的样子。

public void testMethodA(){
S so = S.getInstance();
S spy = Mockito.spy(so);
Mockito.doReturn(something).when(spy).methodB(); // I have to cut the dependency of this method B, hence will stub this 
String exp_value = 'X';
assertEquals(exp_value,spy.methodA);
}

问题是,实际的方法 B 被称为存根的 instsead,因此我的测试失败了。 任何人都可以帮忙,如果我在这里做错了什么,请告诉我。

您的代码经过一些修改后会按预期编译和运行。 这是一个自包含的运行示例。

public class StackOverflow59960713 {
    public interface I {
        String methodA();
    }

    public static class S implements I {
        private static S INSTANCE = new S();

        public static I getInstance() {
            return INSTANCE;
        }

        public String methodA() {
            return methodB();
        }

        public String methodB() {
            return "abc";
        }

    }

    @Test
    public void testMethodA() {
        S so = (S) S.getInstance();  <== getInstance() returns I not S
        S spy = Mockito.spy(so);
        Mockito.doReturn("123").when(spy).methodB();

        String exp_value = "123";
        assertEquals(exp_value, spy.methodA());  <=== methodA() not methodA
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM