2013-10-31 93 views
0

这些是我现在要测试的方法。如何在JUnit测试用例中测试方法中的方法?

public void addGrade(String newGrade) { 
    if (numGrades >= grades.length) { 
     increaseGradesCapacity(); 
    } 
     grades[numGrades] = newGrade; 
     numGrades++; 
} 

public void increaseGradesCapacity() { 
    String[] newGrades = new String[grades.length + 1]; 
    for (int i = 0; i < grades.length; i++) { 
    newGrades[i] = grades[i]; 
    } 
    grades = newGrades; 
} 

目前,我有一个,而不必调用increaseGradesCapacity()方法测试一个测试案例:

@Test public void addGradeTest() { 
    String[] myGrades1 = {"a90", "a100", "q90", "q80", 
    "p100", "e87.5"}; 

    String[] myGrades2 = {"a90", "a100", "q90", "q80", 
    "p100", "e87.5", "q100"};    

    WeightedGrades2 wg = new WeightedGrades2("Aegon Targaryen", 6, myGrades1); 

    wg.addGrade("q100"); 

    Assert.assertArrayEquals("Test for addGrade.", 
    myGrades2, wg.getGrades());       
} 

但我试图找出如何创建调用一个测试用例增加GradesCapacity()方法。这就是我现在所拥有的,但它仍然不能满足Web-CAT的要求。有人有主意吗?

@Test public void addGradeTest2() { 
    String[] myGrades1 = {"a90", "a100", "q90", "q80", 
    "p100", "e87.5"}; 

    String[] myGrades2 = {"a90", "a100", "q90", "q80", 
    "p100", "e87.5", null, "q100"}; 

    WeightedGrades2 wg = new WeightedGrades2("Anakin Skywalker", 7, myGrades1); 

    wg.increaseGradesCapacity(); 
    wg.addGrade("q100");    

    Assert.assertArrayEquals("Test for addGrade.", 
    myGrades2, wg.getGrades()); 
} 
+1

设计查询:应该'increaseGradesCapacity'公开吗?这看起来像内部API。但无论哪种方式,调用'addGrade'都会污染增加容量的测试......为什么不直接调用increaseGradesCapacity并测试该数组是否更大并且已正确保持内容? – Ash

回答

0

我不知道什么是“网络-CAT要求”必须在这种情况下满意,但我会给你,希望回答您的问题一般的答案。

鉴于有问题的方法increaseGradesCapacity()负责增加数组的大小,我会简单地在调用此方法之前和之后测试大小。所以,你的测试可能是这样的:我

@Test public void addGradeTest2() { 
    String[] myGrades1 = {"a90", "a100", "q90", "q80", "p100", "e87.5"}; 
    WeightedGrades2 wg = new WeightedGrades2("Anakin Skywalker", 7, myGrades1); 

    int sizeBeforeIncrease = wg.getGrades().length; 

    wg.increaseGradesCapacity(); 

    int sizeAfterIncrease = wg.getGrades().length; 

    Assert.assertTrue("Expecting size after increase to be larger.", 
         sizeAfterIncrease > sizeBeforeIncrease); 
} 

注意如何抛弃了wg.addGrade('q100');线。如果您的第二个测试全权负责测试increaseGradesCapacity(),而addGrade方法会修改您最终想要检查其大小的等级阵列,那么它会使一个概念不准确,或者至少没有被聚焦和包含。