Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模拟方法中其他类的公共方法(java)_Java_Unit Testing_Mockito_Powermock_Powermockito - Fatal编程技术网

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

模拟方法中其他类的公共方法(java),java,unit-testing,mockito,powermock,powermockito,Java,Unit Testing,Mockito,Powermock,Powermockito,我是莫基托的新手。 守则: public class A{ public A{ ... B.fff(); //the function I want to mock ... } } public class B{ public boolean fff(){ ... ... //connect DB ... } } 对于单元测试 public class ATest{ @T

我是莫基托的新手。 守则:

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)有什么解决方案吗


谢谢。

您在这里真正想做的是将B的模拟注入a。长期而言,这将需要设置一个控制反转容器,但如果这是一个简单的测试应用程序,您可以开始使用(这里的伪代码…我在手机上键入此代码):

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

读一些关于IOC的书——它会让你的测试更容易,从长远来看,它会让你成为一个更好的程序员

可能重复的
Public class A{
  Public A(B bInstance){
    This.b = bInstance;
  }
  Public void foo() {
    B.doSomethingWithDb();
  }
}