单元测试。关于独立测试

时间:2013-04-26 12:00:50

标签: c# unit-testing nunit

在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
        }
    }

3 个答案:

答案 0 :(得分:4)

关于单元测试(与集成测试相反)的一个问题是它们只应该测试单个方法。例如,如果您有一个如下所示的方法:

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

对它的一个很好的测试只会测试两件事:

  1. 如果传入null,则会抛出NullPointerException
  2. 如果传入非null,则会调用database.create()
  3. database.create()实际上是否有用是一个不同的问题。一个与单元测试数据库有关。

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

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

    • 测试1:新数据库:创建公司,确保它在那里。
    • 测试2:新数据库:创建公司,删除它,确保它已经消失。
    • 测试3:新鲜数据库:创建公司,修改它,确保它 工作

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

答案 1 :(得分:1)

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

Good tutorial about unit tests

答案 2 :(得分:0)

你可以模拟依赖关系。

查看http://code.google.com/p/mockito/