单元测试样式问题:数据的创建和删除应该采用相同的方法吗?

ars*_*bon 3 unit-testing

我正在为一个在数据库中维护用户的PHP类编写单元测试.我现在想测试创建用户是否有效,以及删除用户是否有效.我看到有多种可能性:

  1. 我只写了一个创建用户的方法,然后删除它
  2. 我写了两种方法.第一个创建用户,保存它的ID.第二个删除具有已保存ID的用户.
  3. 我写了两种方法.第一个只创建一个用户.第二种方法创建一个用户,以便之后可以删除一个用户.

我已经读过每个测试方法应该独立于其他测试方法,这意味着第三种可能性是要走的路,但这也意味着每个方法都必须自己设置测试数据(例如,如果你想测试它是否可能)添加用户两次).

你会怎么做?在这种情况下,什么是好的单元测试风格?

Gis*_*shu 7

两个不同的东西=两个测试.

Test_DeleteUser()也可以在不同的测试夹具中,因为它具有Setup()确保用户已经存在的不同代码.

[SetUp]
public void SetUp() 
{ 
  CreateUser("Me"); 
  Assert.IsTrue( User.Exists("Me"),  "Setup failed!" );
}

[Test]
public void Test_DeleteUser()
{ 
  DeleteUser("Me");
  Assert.IsFalse( User.Exists("Me") );
}
Run Code Online (Sandbox Code Playgroud)

这意味着如果Test_CreateUser()通过Test_DeleteUser()而不通过- 您知道代码中负责删除用户的部分中存在错误.

更新:只是考虑一下Charlie对依赖问题的评论 - 我的意思是如果Creation被破坏,即使删除,两个测试都会失败.我能做的最好的事情是移动一个防护检查,以便安装程序显示在错误和失败选项卡中; 区分设置失败(在一般情况下,整个测试夹具显示红色应该很容易发现设置失败.)