2017-07-26 98 views
-1

我是新来的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()” 需要连接DB,所以我想嘲笑函数“B .fff()“返回true或false,让测试可以在没有环境的情况下完全工作。

我试着像一些代码:

public class ATest{ 

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

,但它无法正常工作。

是否有使用的Mockito(或PowerMock)的任何解决方案?

谢谢。

+0

可能重复的[如何模拟函数java中的本地函数](https://stackoverflow.com/questions/45293836/how-to-mock-local-function-in-a-function-java) – shmosel

回答

1

你居然想在这里做的是注入B的模拟到A.长期,这将需要建立控制容器的反转,但如果这是一个简单的测试应用程序,你可以使用(伪代码这里开始。 ..我在我的手机)键入此:

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

在您的测试,你会嘲笑B和设置您的预期收益值,然后注入到这一点你A的构造

做一些阅读IOC - 这会让你的测试更容易,会让你从长远来看,一个更好的程序员。

+0

I试着用这个,谢谢〜 – user3879309