2

嘿人们。我最近一直在验证 Struts 2 动作。在我的一个动作类中,精确的保存方法必须有两个 id。那是一个评估类型 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 和评估类型两者中完美运行,它必须存在。

因此,问题是我真的不知道如何测试和实施课程 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";

}
4

1 回答 1

1

在对代码进行单元测试时,您需要从要测试的方法的规范开始。让我们看一下您尝试测试的方法并“猜测”规范是什么。

  1. 如果某个变量取消为空,则执行该方法,否则立即返回
  2. 评估对象不能为空(否则该行将boolean isNew = (assessment.getId() == null);失败并且您不检查是否为空)。另一方面,这一行似乎在您的代码中没有任何用途,因为您不在其他任何地方使用 isNew。
  3. 评估类型也不为空,即它必须预先存在
  4. 课程不为空或必须预先存在
  5. 评估管理器不为空

这些只是您代码中的猜测,所以我相信您拥有的不止这些。

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

在您的 struts2 操作类中,您在调用此操作之前设置取消对象、评估类型、课程和评估管理器。然后,您需要在调用操作之前在测试方法中设置所有这些。

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

 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 

然后测试非空评估是否有效......等等。这些测试中的每一个本身都是一种方法。

我希望这有帮助。

于 2010-01-29T16:30:49.173 回答