代码之家  ›  专栏  ›  技术社区  ›  Xaisoft

如何将其转换为单元测试?

  •  0
  • Xaisoft  · 技术社区  · 14 年前

    我看到的大多数单元测试示例都是简单的测试,比如断言。那个(5,2+3),但是我如何合并一个单元测试一个获取用户信息并将其保存到数据库的方法。例如,我有一个Register方法,它接受一个User对象。从web窗体填充用户对象属性,然后将其保存到数据库中。我可以用这个做哪些可行的单元测试?

    下面是一个例子。假设用户对象有一些必填字段,如Email、FirstName、LastName。有效的单元测试会断言Email不是null或空的吗。这同样适用于其他必填字段。所以在我上面的场景中,这是一个单元测试。

    [Test]
    public void EmptyEmailShouldReturnError()
    {
       User user = new User();
       user.Email = "";
       //Set other properties
    
       //Not sure of nunit syntax here, so I will make something up.
       Assert.IsNotEmpty(user.Email);
    
    }
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   Darin Dimitrov    14 年前

    这些不是单元测试。单元测试是用来孤立地测试事物的。与数据库直接交互的东西不能单独测试,因为它们依赖于这个数据库。如果您想孤立地测试事物,您需要引入抽象级别,以避免组件之间的强耦合。在单元测试中,一种常见的技术是用模拟对象替换某个组件。例如,只有在抽象了数据库访问层的情况下,这才是可能的。

    现在回到问题上来。如何测试数据库访问层?这些被称为集成测试。有许多技术可以用来执行与数据库的集成测试。其中一些包含一个测试数据库,该数据库在Setup方法中重新创建,并在TearDown方法中删除,这样所有测试都会假定要处理的有效状态。因此,您可能有一些脚本创建并用测试数据填充数据库,并且在运行每个测试之前调用这些脚本。您甚至可以将所有内容包装到数据库事务中,这些事务将在最后回滚。

        2
  •  2
  •   tster    14 年前

    好吧,这取决于你想“单元”测试什么。

    • 您是否正在测试验证所创建的用户是否有效的业务逻辑?
    • 你想同时测试两者吗?

    如果您想测试数据库层,那么创建一个单元测试可以写入和读取的测试数据库。

        3
  •  1
  •   SuperNES    14 年前