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

3 回答 3

4

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

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

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

  1. 如果null传入,NullPointerException则抛出
  2. null如果传入non- ,则database.create()调用

是否database.create()真的做任何有用的事情是一个不同的问题。与对数据库进行单元测试有关的一种。

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

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

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

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

于 2013-04-26T12:31:11.693 回答
1

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

关于单元测试的好教程

于 2013-04-26T12:15:15.073 回答
0

您可以模拟依赖项。

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

于 2013-04-26T12:03:01.527 回答