Struts动作验证

时间:2009-11-23 19:11:44

标签: unit-testing struts2 struts-validation

嘿,人们。我最近一直在验证Struts 2的操作。 在我的一个动作类中,准确的保存方法必须有两个id。 这是一个assessmenttype id和一个课程id。 这就是迄今为止所做的。

@Test
public void testSave() {
    Assessment assessment = new Assessment();
    assessment.setAssessmentType(assessment.getAssessmentType());
    assessment.setCourse(assessment.getCourse());
    assessment.setAmount(2);
    assessment.setDescription("A test Description");
    assessment.setPercentage(20.0);

    action.setAssessment(assessment);
    action.save();

    assertNotNull(action.getAssessment().getId());
}

所有帮助将不胜感激。

嘿抱歉偷看, 我教过我问过这个问题。 但我想要真正实现的是测试我用于评估的动作类。 例如,如果客户端在添加评估时使用该应用程序,则会向用户隐藏课程ID,但为了保存评估,它必须存在。为了保存评估,他们选择了一种评估类型。因此,为了使save方法能够完美地运行课程id和assessmenttype,它必须存在。

因此,问题是我真的不知道如何测试和实现课程ID以及评估类型ID。

再次感谢。 所有的帮助将不胜感激

Save Action方法如下所述;

public String save(){
    if (cancel != null) {
        return "cancel";
    }

    boolean isNew = (assessment.getId() == null);

    assessmentType.addAssessment(assessment);
    course.addAssessment(assessment);

    assessment = assessmentManager.save(assessment);


    return "save";

}

1 个答案:

答案 0 :(得分:1)

在单元测试代码时,您需要从正在测试的方法的规范开始。让我们来看看你试图测试和“猜测”规范是什么的方法。

  1. 如果某个变量cancel为null,则执行该方法,否则立即返回
  2. 评估对象不能为空(否则行boolean isNew = (assessment.getId() == null);将失败,您不检查null)。另外请注意,由于您不在其他任何地方使用isNew,因此该行似乎没有任何用途。
  3. assessmentType也不是null,也就是说它必须存在
  4. 当然不是空的或必须存在
  5. assessmentManager不为空
  6. 这些只是来自您的代码的猜测,因此我相信您拥有的不仅仅是这些。

    现在您要编写测试,一次测试这些测试中的每一个。通常,您需要一种测试方法来精确测试一件事。描述中也缺少一些进一步的信息,但让我们再次猜测。

    在struts2操作类中,您要在调用此操作之前设置cancel对象,assessmentType,course和asessmentManager。然后,在调用操作之前,需要在测试方法中设置所有这些。

    因此,要测试第一个点,您要设置变量cancel。也许是这样的:

     action.setCancel(Some Object);
     action.save();
     //now test the result condition to see if it behaved as expected.
    

    然后测试第二点你可以使用这样的代码:

     //testing that null assessment throws NullPointerException
     action.setAssessment(null);
     action.save();
     //now test that the exception was thrown 
    

    然后测试非空评估是否有效......等等。每个测试都是一种方法。

    我希望这会有所帮助。