c#单元测试 – 重载方法测试的命名约定
发布时间:2020-12-15 07:49:31 所属栏目:百科 来源:网络整理
导读:我有一些简单的扩展方法在c#我正在编写单元测试.其中一种扩展方法是超载的,所以我无法为单元测试提供合理的命名约定. 示例重载方法: public static class StringExtensions{ public static Liststring ToList(this string value,char delimiter) { return T
我有一些简单的扩展方法在c#我正在编写单元测试.其中一种扩展方法是超载的,所以我无法为单元测试提供合理的命名约定.
示例重载方法: public static class StringExtensions { public static List<string> ToList(this string value,char delimiter) { return ToList(value,new[] { delimiter }); } public static List<string> ToList(this string value,char[] delimiterSet) { .. } } 如果我想写两个单元测试,每个方法一个,你如何命名测试?通常我会使用: [TestMethod,TestCategory("Single Method Tests")] public void ToListTest 但是用两个同名的方法,我正在努力找到一个很好的约定 [TestMethod,TestCategory("Single Method Tests")] public void ToListTest [TestMethod,TestCategory("Single Method Tests")] public void ToListTestOverload 是可怕的 [TestMethod,TestCategory("Single Method Tests")] public void ToListTestWithChar [TestMethod,TestCategory("Single Method Tests")] public void ToListTestWithCharArray 基于参数类型更好,但仍然相当可怕. 有些可能会建议编写一个既可以针对两个重载的测试方法,但是我希望与单元测试和方法具有1:1的关系,即使当前链接过载.我不想在测试中做出任何假设,即重载被链接和传递. 你会如何处理? 解决方法
Roy Osherove在他的书“单元测试的艺术”中基于您尝试测试的行为推荐命名约定,并不一定在生产方法和测试方法之间进行一对一的映射.所以,作为一个简单的例子,假设我有一个Stack类,像这样:
public class Stack { public void Push(int value); public int Pop(); public bool IsEmpty(); } 编写测试的一种方法是具有三种测试方法: [TestMethod] public void PushTest [TestMethod] public void PopTest [TestMethod] public void IsEmptyTest 但是,有一个更好的测试方法指定了Stack类的行为.那么想法就是你在类行为和测试方法之间有一对一的映射.所以,一个行为是空堆栈上的IsEmpty返回true.另一个是推一个元素使堆栈不空.然后,我将根据这些简单的英文句子以Arrange/Act/Assert格式编写测试,指定这些行为的格式如下: MethodName_StateOfTheObject_ExpectedResult 所以对于上面提到的行为: [TestMethod] IsEmpty_OnEmptyStack_ReturnsTrue [TestMethod] Push_OnEmptyStack_MakesStackNotEmpty 我会鼓励您考虑上述方法试图测试的行为,然后将这些行为映射到测试.例如: [TestMethod] ToList_OnEmptyString_ReturnsEmptyList [TestMethod] ToList_OnStringWithDelimiters_ReturnsListWithTokensSeparatedByDelemiter [TestMethod] ToList_OnStringWithoutDelimiters_ReturnsListWithOneString 更多信息here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |