C# 单元测试。关于独立测试

C# 单元测试。关于独立测试,c#,unit-testing,nunit,C#,Unit Testing,Nunit,在否决之前,请听我的问题:) 我使用单元测试。我知道他们必须彼此独立。虽然如何测试书籍的存储库。必须创建第一本书,然后更新,然后删除。我有三个单元测试。对这些单元测试具有依赖性难道不是正确的吗 [TestFixture] public class CompanyRepositoryTests { public void CreateCompany() { // This must be called 1

在否决之前,请听我的问题:) 我使用单元测试。我知道他们必须彼此独立。虽然如何测试书籍的存储库。必须创建第一本书,然后更新,然后删除。我有三个单元测试。对这些单元测试具有依赖性难道不是正确的吗

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

您可以模拟依赖项


看看

你可以模拟依赖关系


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


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

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

public void createCompany(Company c) {
  if (c == null) {
    throw new NullPointerException();
  }
  database.create(c);
}
良好的it测试只能测试两件事:

  • 如果传入
    null
    ,则抛出
    NullPointerException
  • 如果传入非-null,则调用
    database.create()
  • database.create()
    是否真的做了任何有用的事情是另一个问题。这与数据库的单元测试有关

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

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

    • 测试1:刷新数据库:创建一个公司,确保它在那里
    • 测试2:刷新数据库:创建一个公司,删除它,确保它消失
    • 测试3:刷新数据库:创建一个公司,修改它,确保它 成功了
    每个测试都应该从头开始。

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

    public void createCompany(Company c) {
      if (c == null) {
        throw new NullPointerException();
      }
      database.create(c);
    }
    
    良好的it测试只能测试两件事:

  • 如果传入
    null
    ,则抛出
    NullPointerException
  • 如果传入非-null,则调用
    database.create()
  • database.create()
    是否真的做了任何有用的事情是另一个问题。这与数据库的单元测试有关

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

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

    • 测试1:刷新数据库:创建一个公司,确保它在那里
    • 测试2:刷新数据库:创建一个公司,删除它,确保它消失
    • 测试3:刷新数据库:创建一个公司,修改它,确保它 成功了

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

    每个测试都必须是独立的,这不是可选的。测试所需的任何数据都需要在测试范围内创建。因此,这意味着我必须在一个方法内调用三个方法Create、Update和Delete,比如说:“CRUDCompany”?每个测试都必须是独立的,这不是可选的。测试所需的任何数据都需要在测试范围内创建。因此,这意味着我必须在一个方法内调用三个方法Create、Update和Delete,比如说:“CRUDCompany”?我根本不想使用mock。我将使用test database+方法必须使用相同的数据库进行测试,我根本不想使用mock。我将使用测试数据库+方法必须测试相同的数据库谢谢!很好的方法。我会照办的。非常感谢你,朋友,我有一个简短的问题。如何确保并创建每次刷新的数据库?谢谢!很好的方法。我会照办的。非常感谢你,朋友,我有一个简短的问题。如何确保并创建每次刷新的数据库?