适当的单元测试理念

时间:2015-03-30 18:37:19

标签: database unit-testing

对每个案件做什么都是正确的?

1:上下文:测试创建数据库的函数以及为该数据库生成元数据

问题:通常情况下,单元测试用例应该是独立的,但是如果我们想要确保函数在尝试创建重复数据库时引发异常,那么在第一个测试用例时是否可以接受测试用例该函数有效,第二个函数在再次调用时测试它是否失败?

2:大多数其他功能需要数据库和元数据。在每个测试套件的设置中调用前面的函数来创建数据库和元数据会不会更好?或者在数据库中硬编码所需的信息会更好吗?

2 个答案:

答案 0 :(得分:1)

您的自动化测试应模拟以下内容:

  1. 设置
  2. 运动(SUT)
  3. 验证
  4. 拆卸
  5. 此外,每个测试应尽可能简洁,只显示正在测试的详细信息。应该抽象出执行测试所需的所有其他基础结构,以便测试方法作为文档,仅公开正在测试的输入,以确定您要为该特定测试验证的内容。

    每个测试都应该努力从一个干净的平板开始,以便每次都能以相同的结果重复测试,无论先前测试的结果如何。

    我通常为每个集成测试执行测试设置和测试清理方法,或者依赖于维持被测系统状态并且需要将其擦除状态的单例的任何测试。 / p>

答案 1 :(得分:0)

通常情况下,单元测试用例应该是独立的,但是如果我们想要确保函数在尝试创建重复数据库时引发异常,那么在第一个测试用例中是否可以接受测试用例如果函数有效,第二个函数在再次调用时测试它是否失败?

不,有序测试很糟糕。没有什么可以阻止你进行测试调用另一种恰好是测试的方法:

@Test
public void createDataBase(){
  ...
}

@Test
public void creatingDuplicateDatabaseShouldFail(){
   createDataBase();
   try{
      //call create again should fail
      //could also use ExpectedException Rule here
      createDataBase();
      fail(...);
   }catch(...){ 
    ...
   }
}

大多数其他功能需要数据库和元数据。在每个测试套件的设置中调用先前的函数来创建数据库和元数据会不会更好?或者在数据库中硬编码所需的信息会更好吗?

如果您使用DbUnit等类似的数据库测试框架,它可以在每次测试中反复重复使用相同的数据库设置。