在方法中模拟其他 class 的 public 方法 (java)

mock a public method of other class in a method (java)

我是 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()"需要连接数据库,所以我想用return true或false来模拟函数"B.fff()",让测试可以在没有环境的情况下完全工作.

我尝试了一些代码:

public class ATest{

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

但它不起作用。

有没有使用Mockito(或PowerMock)的解决方案?

谢谢。

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

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

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

读一些关于 IOC 的书 - 它会让你的测试更容易,并且会让你在长期 运行 中成为更好的程序员。