phpunit - 在 Moodle 中以编程方式完成课程并设置成绩
问题描述
我是 Moodle 的新手,我正在开发一个旧应用程序,以下是规格:
$version = 2016120502.05;
$release = '3.2.2+ (Build: 20170407)';
$branch = '32';
我的最终目标是能够创建一个生成器类来为一些 PHPUnit 单元测试创建虚拟数据。( https://docs.moodle.org/dev/Writing_PHPUnit_tests ) 我发现有一个用于创建课程和用户的预构建。但我还需要能够用他们的成绩标记他们在课程中完成。
我在看这个https://docs.moodle.org/dev/Gradebook_API可能至少是我需要的一部分。但是,系统中有很多表,我不确定这是我需要的。
这是我的代码,直到最后一点:
// Create user;
$this->user = $this->getDataGenerator()->create_user();
// Create courses.
$courseCount = 0;
$courses = [];
while ($courseCount < 5) {
$courses[] = $this->getDataGenerator()->create_course();
$courseCount++;
}
/** @var \myGlobal_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('myGlobal_generator');
// Create curriculum.
$this->curriculum = $generator->createCurriculum($courses);
// Now we need to set a user to have completed each one
// of the courses and set their grades for each as well.
解决方案
请注意,评分和完成跟踪不一定是相关的事情。例如,您可以将活动和课程标记为已完成而不涉及任何评分,如下所示:
$cmassign = get_coursemodule_from_id('assign', $cmid);
$completion = new completion_info($course);
$completion->update_state($cmassign, COMPLETION_COMPLETE, $user->id);
$ccompletion = new completion_completion(['course' => $course->id, 'userid' => $user->id]);
$ccompletion->mark_complete();
如果您确实需要通过评分和基于成绩的完成来测试/生成数据,您可能需要按照以下方式对其进行编码:
- 创建启用完成跟踪的课程。
- 使用基于成绩的完成跟踪(自动完成跟踪,完成使用成绩为真)创建活动(将其添加到课程中)。
- 使用全局助手创建新的评分项目(与活动和用户相关)
grade_update
。 - 计算活动的内部完成状态(例如使用公共方法
$completion->internal_get_state
) - 测试活动的状态(完成通过或完成失败)。
推荐阅读
- mysql - 使用 group by 从子查询中获取聚合值
- c - Strstr 函数不返回指向第一次出现的指针
- spring - 保存 Reactor Mongo 结果时出现重复键错误
- html - CSS半页粘半滚动无法正常工作
- r - 如何强制 r optim 运行更多迭代?
- sqlite - 如何从 Electron 前端进行数据库调用?
- android - (android) 如何在约束布局中将视图放置在其他视图下方
- cmake - cmake从变量中提取子字符串
- python - 计算无穷大
- python - 为什么我的 LSTM 的预测只提供 1 step-out 预测,而训练是 2 step out?