2015-10-20 56 views
-4

我創建了一個工廠模式程序,爲MP分配一個隨機策略。隨機數生成器生成1-3之間的數字,該程序使用隨機數從Policy類調用適當的策略。 任何人都可以幫助我爲這個類創建一個Junit測試用例嗎?提前致謝。任何人都可以幫助我爲這個班級創建一個junit測試用例嗎?

public class PolicyFactory { 
    public Policy createPolicy(int num) { 
      Policy policy = null; 

     if(num==1) { 
      policy = new Policy1(); 
     } else if(num==2) { 
      policy = new Policy2(); 
     } else if(num==3) { 
      policy = new Policy3(); 
     } 

     return policy; 
    } 

} 
+1

我建議4次單元測試。 – Henry

+0

public void testPf(){ \t \t Junit test = new Junit(); \t \t int result = test.createPolicy(1,2,3); \t \t assertEquals(1 || 2 || 3,result); \t} – TMC

+0

我的主要努力是能夠測試1-3之間的任何數字都可以通過該方法,並且必須輸出適當的方法。我從來沒有做過Junit測試,所以我的嘗試很差。 – TMC

回答

1

在你的情況下,在方法外生成隨機數並傳遞給它。這使得單元測試非常簡單:只需測試所有情況:只需測試所有情況:

assertEquals("Policy 1 created", Policy1.class, createPolicy(1).getClass()); 

依此類推。

更復雜的是當方法本身內部產生隨機數時。在這種情況下,您需要模擬生成具有特定值的隨機數來測試所有情況。有很好的工具,如Mockito和Easymock來做到這一點。

+0

執行此行後,我收到了一個錯誤,要求我創建此方法,但是我在另一個類中聲明瞭此方法爲「公共策略createPolicy(int num)」,是否我以某種方式聲明瞭錯誤? – TMC

+0

@TashaCampbell答案將方法視爲「靜態」。您需要將該方法聲明爲「static」,或者爲測試創建一個PolicyFactory實例。 –

+0

是的,我曾試圖宣佈它是靜態的,它沒有任何區別。 – TMC

0

我相信你正在尋找的東西是這樣的:

@Test 
public void testPf() { 
    Assert.assertTrue(policyFactoryInstance.createPolicy(1) instance of Policy1) 
    Assert.assertTrue(policyFactoryInstance.createPolicy(2) instance of Policy2) 
    Assert.assertTrue(policyFactoryInstance.createPolicy(3) instance of Policy3) 
    Assert.assertNull(policyFactoryInstance.createPolicy(0)) 
} 
+1

還要測試createPolicy(n),其中n不是1,2或3,則返回null。 – Jonatan

相關問題