2013-04-26 150 views
1

在downvote我的问题之前请听:) 我使用单元测试。我知道他们必须彼此独立。尽管如何测试书籍库。第一本书必须创建,然后更新,然后删除。我有三个单元测试。对这些单元测试有依赖是不是正确?单元测试。关于独立测试

[TestFixture] 
    public class CompanyRepositoryTests 
    { 
     public void CreateCompany() 
     { 
      // This must be called 1 
     } 

     public void UpdateCompany() 
     { 
      // This must be called 2 
     } 

     public void DeleteCompany() 
     { 
      // This must be called 3 
     } 
    } 
+1

每个测试都必须是独立的,这不是可选的。测试所需的任何数据,都需要在测试范围内创建。 – 2013-04-26 12:04:14

+0

所以这意味着我必须在一个方法内调用三个方法创建,更新和删除让我们说:“CRUDCompany”? – Sergey 2013-04-26 12:05:59

回答

4

约单元测试的东西(而不是集成测试)是,他们只应该测试单个方法。因此,举例来说,如果你有一个看起来像这样的方法:

public void createCompany(Company c) { 
    if (c == null) { 
    throw new NullPointerException(); 
    } 
    database.create(c); 
} 

一个好的测试那样会测试两件事情:

  1. 如果null传入,NullPointerException抛出
  2. 如果非null传入,database.create()被称为

无论database.create()实际上,有用的是一个不同的问题。一个与单元测试数据库有关的事情。

在你的情况下,按照建议嘲笑底层存储,并编写适当的单元测试。

另一方面,在集成测试中,具有依赖关系显然很好。即使如此,您的测试应该看起来像

  • 测试1:新数据库:创建一个公司,确保它在那里。
  • 测试2:新建数据库:创建一个公司,删除它,确保它不在。
  • 测试3:新建数据库:创建一个公司,修改它,确保它的工作成果为 。

每个测试都应该从头开始。

+0

谢谢!非常好的方法。我会遵循它。非常感谢你,朋友 – Sergey 2013-04-26 12:52:51

+0

一个简单的问题。如何确保每次创建新数据库时创建? – Sergey 2013-04-26 12:57:47

1

在这个练习中,您将学习如何测试修改数据库CRUD操作。考虑的一个前提是测试不一定按照特定顺序运行。另一个是每个测试都可以根据需要多次执行。所以你的测试不应该依赖于以前的测试执行。例如,如果您的测试要删除数据库中的记录,则测试的设置应提供要删除的记录。这样,测试可以重复执行。

Good tutorial about unit tests