Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试示例,在具有必填字段的类上?_Unit Testing - Fatal编程技术网

Unit testing 单元测试示例,在具有必填字段的类上?

Unit testing 单元测试示例,在具有必填字段的类上?,unit-testing,Unit Testing,我是开发单元测试的新手,我找不到一个如何测试现有类的例子 该类有一个save方法,当用户在UI中单击save时,该方法在数据库中执行插入或更新操作。但是save方法需要填充必需的字段。还有其他字段没有 那么我如何才能正确地运行这个测试呢 我想把它写出来 Give a user When user saves object Then Field1 is required then Field2 is required Then Field3 is required WhenUserSavesOb

我是开发单元测试的新手,我找不到一个如何测试现有类的例子

该类有一个save方法,当用户在UI中单击save时,该方法在数据库中执行插入或更新操作。但是save方法需要填充必需的字段。还有其他字段没有

那么我如何才能正确地运行这个测试呢

我想把它写出来

Give a user
When user saves object
Then Field1 is required
then Field2 is required
Then Field3 is required

WhenUserSavesObject()
object = new object
object.field1 IsNot Nothing
像这样的,对吗

那么其他可选字段呢?如何测试save方法以确保它正确地获取所有这些值

正在尝试使用BDD,但不确定是否应该尝试


在调用测试方法时,找不到任何具有许多属性的类的示例。

您没有说明要用哪种语言实现项目和测试。例如,使用Groovy和Grails,该框架提供了一个很好的工具集,可以轻松地实现这些测试,并且可以作为一个很好的示例,说明如何实现您所要求的测试

void testUsernameIsRequiredToValidate() {
  mockForConstraintsTests User
  def user = new User(username: "")
  assertFalse user.validate()
  assertEquals "blank", user.errors["username"]
}
代码是不言自明的。在测试方法的第一行中,我们正在设置环境,以便在单元测试中向
User
类添加验证功能。之后,我们创建一个新用户,并根据其约束对其进行验证。最后一行检查字段
firstname
上的
空白约束是否导致测试失败

class User {
  String firstname
  String password

  static constraints = {
    username(blank: false)
    password(blank: false, minSize: 6)
  }
}
有多个必填字段来验证
用户
对象,可以在几个小类中实现阴性测试。对于阳性测试,您将建立一个有效的
用户
实例并对其进行验证

void testUserWithUsernameAndAMinimumPasswordOfSixCharactersIsValid() {
  mockForConstraintsTests User
  def user = new User(username: "admin", password: "secret")
  assertTrue user.validate()
}

如果您正在使用另一个框架和/或语言进行开发,您可能会对模仿依赖项并将测试中的代码分解为可测试的小部分这一主题感兴趣。

如果您只是在学习单元测试,那么您可以为第一个单元测试选择一个更简单的目标。使用DB进行单元测试要比测试没有依赖关系的普通对象复杂得多。最好是一次练习和学习一件事

然而,如果你真的想解决这个问题,你应该告诉我们你使用的是什么语言、持久化机制、数据库——否则我们就是瞎猜。例如,如果您碰巧使用Java,DbUnit就是您的朋友


通常,将对DB的依赖性限制在代码中的一个薄层上是一种好的做法,以便使代码的其余部分更易于测试。根据您的描述,不清楚您的类是否已经是该层的一部分,或者它是否可以与DB隔离。

Aww我明白了。我现在正在学习一些基础知识。我发现了一本好书。它是VB.Net,我使用的是微软版本的nUnit。数据库层和业务逻辑在同一层上,在同一个类中。我认为这本书实际上会有所帮助,因为它现在进入了现实世界的场景。!谢谢你的帮助。