2015-10-20 59 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

相关问题