2

我有一个单元测试,它断言特定模型是否具有属性以及该属性是否不为空。

因此,类似于以下内容:

public function testHasMySpecialProperty()
{
    $this->assertTrue($this->model->getMySpecialProperty());
}

我的问题是模型应该是什么。模拟或对象的真实实例。

在这种情况下,对象是系统的用户。因此,为了正确加载,我需要用户 ID 等。但如果我只是伪造它,那么测试感觉毫无用处

4

3 回答 3

2

使用 amock并不是真正测试模型。只需传递真实对象并检查属性即可。毕竟,这就是您要测试的内容。

于 2012-12-09T01:18:27.723 回答
1

您不使用模拟来测试模拟。您使用模拟来切断您要测试的真实系统的一部分。检查模拟是否具有属性正在测试模拟。它不会让您进一步了解您的真实系统。

于 2012-12-09T02:14:18.290 回答
1

这取决于。当复杂对象或具有外部依赖关系的对象不是测试的主题时,使用模拟来排除复杂对象的行为。

因此,如果您正在测试 的行为model,请使用真实的东西。如果model是一个数据对象,没有行为并且没有附加到外部资源(例如,不进行数据库调用),那么使用真实的东西。如果model有一些额外的行为或依赖项,并且它不是测试的目标,请继续模拟它。

于 2012-12-09T03:48:22.000 回答