在方法中模拟其他类的公共方法(java)

时间:2017-07-26 02:48:16

标签: java unit-testing mockito powermock powermockito

我是Mockito的新手。 对于代码:

public class A{
   public A{
      ...
      B.fff();  //the function I want to mock
      ...
   }
}

public class B{
    public boolean fff(){
       ...
       ...  //connect DB
       ... 
    }
}

对于单元测试,

public class ATest{

    @Test
    public void test(){
        A mock_a = new A();
        Assert.assertNotNull(mock_a);
    }
}

由于功能" B.fff()"需要连接数据库,所以我想模拟函数" B.fff()"返回true或false,让测试可以完全无环境地工作。

我尝试了一些代码:

public class ATest{

    @Test
    public void test(){
        PowerMockito.when(B.fff()).thenReturn(true);
        Assert.assertNotNull(new A());
    }
}

但它不起作用。

使用Mockito(或PowerMock)有什么解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你真正想要做的是将B模拟注入A.长期需要设置控制容器的反转,但如果这是一个简单的测试应用程序,你可以从这里开始(伪代码...我在手机上输入了这个内容:

Public class A{
  Public A(B bInstance){
    This.b = bInstance;
  }
  Public void foo() {
    B.doSomethingWithDb();
  }
}

在测试中,您将模拟B并设置预期的返回值,然后将其注入A的构造函数中。

在IOC上做一些阅读 - 这将使您的测试更容易,并且从长远来看将使您成为更好的程序员。