2017-07-26 179 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