【问题标题】:mock a public method of other class in a method (java)在方法中模拟其他类的公共方法(java)
【发布时间】:2017-07-26 02:48:15
【问题描述】:

我是 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)的解决方案?

谢谢。

【问题讨论】:

标签: java unit-testing mockito powermock powermockito


【解决方案1】:

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

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

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

阅读一些关于 IOC 的内容 - 它会让您的测试更容易,并且从长远来看会让您成为更好的程序员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 2015-12-17
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多