selenium WebDriver和NUnit - [测试]最佳实践

pu3pd22g  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(230)

假设有一个针对汽车对象的CRUD(创建、读取、更新、删除)测试。
是不是最好

  1. [Test, Order(1)]
  2. {
  3. Create
  4. }
  5. [Test, Order(2)]
  6. {
  7. Read
  8. }
  9. [Test, Order(3)]
  10. {
  11. Update
  12. }
  13. [Test, Order(4)]
  14. {
  15. Delete
  16. }

字符串

  1. [Test]
  2. {
  3. Create
  4. Read
  5. Update
  6. Delete
  7. }


两种方法都有效,但我想知道利弊是什么

0yg35tkg

0yg35tkg1#

这是那些可以导致基于意见的答案的问题之一,但我认为它可以相当真实地回答。
在编写测试时,人们会假设它可能会失败--否则,为什么要编写它。如果失败,您需要知道哪里出了问题。假设您为所有测试给予有意义的名称,第一种方法会告诉您,例如,更新失败,而其他三个正常工作。这对它有利。
在第二种方法中,你需要添加消息来明确失败的原因,这是一个小小的不便,但你最不想看到的是必须查看堆栈跟踪来简单地知道四个中的哪一个失败了。
一个折衷的方法是这样写。

  1. [Test]
  2. {
  3. Create
  4. }
  5. [Test]
  6. {
  7. Create
  8. Read
  9. }
  10. [Test]
  11. {
  12. Create
  13. Update
  14. }
  15. [Test]
  16. {
  17. Create
  18. Delete
  19. }

字符串
事实上,这也是TDD的老前辈们通常的建议,如果你的测试像他们应该的那样小而简单,重复一些操作所需要的额外时间应该是最小的,成本远远低于你可能花费的额外时间的价值。
在NUnit下,为了更酷,你可以使用Assume.That来确保每个初步的Create操作都能通过而不会产生额外的错误。
正如@Ilya所指出的,你的第一种方法使得单独运行单个测试是不可能的。通过使测试独立,避免了这个问题。
所以.

展开查看全部

相关问题