【问题标题】:Should a unit test include the converse of what you are testing?单元测试是否应该包含与您正在测试的内容相反的内容?
【发布时间】:2016-10-11 01:26:20
【问题描述】:

假设我们有一款游戏,其中包含不同类型的服务器来代表不同的国家。现在,假设该游戏只允许用户“结交”仅在其帐户所连接的同一服务器中的其他玩家。作为一名开发人员,我的任务是编写一个测试用例,只是为了查看让用户“结伴”彼此的功能是否有效。但是,这就是我的困境所在,因为我只需要测试用户是否可以“结交”其他人,我是否还必须测试用户是否不能在同一测试用例中从另一台服务器添加用户,或者应该是在另一个测试用例中编写的,与我正在编写的当前测试用例完全不同?

【问题讨论】:

    标签: unit-testing testing automated-tests


    【解决方案1】:

    是的,你应该这样做。

    你描述的第一个测试,你只是测试他们是否可以有一个伙伴,被称为Happy Path testing。您正在测试它是否可以正常工作,没有异常、错误或奇怪的用例。

    Happy Path 测试是一个好的开始。其他一切都是真正有趣的开始。

    在你的情况下,想到的事情是......

    • 如果他们和一个无效的伙伴交朋友怎么办?
    • 如果他们与已经是他们好友的人成为好友怎么办?
    • 如果他们与不是用户的东西成为好友怎么办?

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

    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 之类的固定生成器获得。

    【讨论】:

    • 非常感谢,这真的解决了我的很多问题,现在我不太确定我应该做什么了^_^。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多