2016-10-11 62 views
1

想象一下,我们有一个包含不同类型服务器的游戏来代表不同的国家。现在,让我们说游戏只允许用户“与朋友”只与其帐户所在服务器相同的其他玩家。作为一名开发人员,我负责编写一个测试用例,仅用于查看用户是否可以互相“伙伴”互动。然而,这里是我的困境所在,因为我只需测试用户是否可以“伙伴”别人,是否还必须测试用户是否不能在同一个测试用例中添加来自其他服务器的用户,或者应该写在另一个测试用例中,与我正在写的当前测试用例完全分开吗?单元测试应该包含与您正在测试的内容相反的内容吗?

回答

1

是的,你应该。

您所描述的第一次测试,在那里你只是测试,如果他们能有一哥们,被称为Happy Path testing。你正在测试它的工作原理,没有例外或错误或奇怪的用例。

快乐路径测试是一个良好的开端。其他一切都是真正乐趣开始的地方。

在你的情况,脑海中出现的东西...

  • ,如果他们有一个无效的哥们哥们什么?
  • 如果他们与已经是他们的朋友的人伙伴呢?
  • 如果他们与不是用户的东西伙伴怎么办?

如何将这些应组织是口味的问题。理想情况下,他们都是单独的测试。这使得每个测试的目的都是通过测试名称清晰的,并且避免了测试之间的交互和依赖关系。这里有一个没有特定语言的草图。

describe add_buddy { 
    test happy_path { 
     assert user.add_buddy(valid_buddy); 
     assert user.buddies.contains(valid_buddy); 
    } 

    test buddy_on_another_server { 
     buddies = user.buddies; 
     assert !buddies.contains(invalid_buddy); 

     assertThrows { 
      user.add_buddy(invalid_buddy); 
     } InvalidBuddy; 

     assert buddies == user.buddies, "buddy list unchanged"; 
    } 

    test buddy_with_non_user { 
     buddies = user.buddies; 

     assertThrows { 
      user.add_buddy(non_user); 
     } ArgumentError; 

     assert buddies == user.buddies, "buddy list unchanged"; 
    } 

    test buddy_an_existing_buddy { 
     assert user.add_buddy(valid_buddy); 

     # Should this return true? False? An exception? 
     # You have to decide. I decided false. 
     assert !user.add_buddy(valid_buddy); 

     # The buddy is only on the list once. 
     assert user.buddies.numContains(valid_buddy) == 1; 
    } 
} 

之类的东西uservalid_buddy可以在setup程序来创建,或者更好的他们可以通过固定装置发生器如Factory_Girl

+1

谢谢你这么多,这确实清除了很多我的问题,现在我什么我应该做的^ _ ^少不确定性。 – Belphegor