在哪里测试验证 - 在单元或功能测试中?

时间:2012-11-08 07:23:36

标签: unit-testing testing yii tdd validation

您建议在哪里测试验证?

这是来自Yii演示的功能测试:

// test login process, including validation
 $this->clickAndWait('link=Login');
 $this->assertElementPresent('name=LoginForm[username]');
 $this->type('name=LoginForm[username]','demo');
 $this->clickAndWait("//input[@value='Login']");
 $this->assertTextPresent('Password cannot be blank.');

但针对每个错误案例的验证测试(例如“密码太长”或“电子邮件不正确”)将花费大量时间。那么,为什么不在单元测试中测试验证呢?

2 个答案:

答案 0 :(得分:2)

我通常提供一个或两个场景来显示用户如何看待帮助以进行验证,但我通常会将它们放在更高级别,例如:

Given Fred forgets to fill in his phone and email
When he tries to register
Then he should be told what's missing.

这些步骤可以翻译为simple code DSL,也可以添加到Cucumber等工具中(参见BDD)。验证方案(功能)足以举例说明系统的功能。

有效和无效的例子然后按照你的建议进入单元测试。

如果您将功能场景视为展示系统的功能,并将单元测试视为展示类的功能或更细粒度的代码元素,则更容易实现分离。请注意,我在这里避免使用单词“test”作为动词,因为即使在单元级别它仍然只是示例。

答案 1 :(得分:1)

当然,这是你的项目,你可以在你想要的地方测试你想要的东西。

我通常在模型单元测试中测试整个验证。之后,我在网络测试期间再次测试它(但不太广泛)(这是为了测试控制器是否正在解析正确的变量等)。