• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件单元测试和事先测试开发

发布: 2009-3-30 12:58 | 作者: 不详 | 来源: 测试时代采编 | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网

失败了,没关系。以下代码可以使其通过:

        public override string ToString()
        {
            string[] items = new string[elements.Length];
            for (int index = 0; index < elements.Length; index++)
            {
                items[index] = elements[index].ToString();
            }
            return String.Join(", ", items);
        }

启用 Foreach
许多用户希望能够使用 foreach 遍历我的列表。为此,我需要在类中实现 Ienumerable,并定义一个单独的用于实现 Ienumerable 的类。第一步,测试:

        [Test]
        public void TestForeach()
        {
            IntegerList list = new IntegerList();
            list.Add(5);
            list.Add(10);
            list.Add(15);
            list.Add(20);

            ArrayList items = new ArrayList();

            foreach (int value in list)
            {
                items.Add(value);
            }

            Assertion.AssertEquals("Count", 4, items.Count);
            Assertion.AssertEquals("index 0", 5, items[0]);
            Assertion.AssertEquals("index 1", 10, items[1]);
            Assertion.AssertEquals("index 2", 15, items[2]);
            Assertion.AssertEquals("index 3", 20, items[3]);
        }

我还通过 IntegerList 实现 IEnumerable:

        public IEnumerator GetEnumerator()
        {
            return null;
        }

运行测试时,此代码生成异常。为了正确地实现此功能,我将使用一个嵌套类作为枚举器。

    class IntegerListEnumerator: IEnumerator
    {
        IntegerList    list;
        int index = -1;

        public IntegerListEnumerator(IntegerList list)
        {
            this.list = list;
        }
        public bool MoveNext()
        {
            index++;
            if (index == list.Count)
                return(false);
            else
                return(true);
        }
        public object Current
        {
            get
            {
                return(list[index]);
            }
        }
        public void Reset()
        {
            index = -1;
        }
    }

此类将一个指针传递给 IntegerList 对象,然后只返回此对象中的元素。

这样,便可以对列表执行 foreach 操作,但遗憾的是 Current 属性属于对象类型,这意味着每个值将被装箱才能将其返回。此问题可采用一种基于模式的方法加以解决,此方法酷似当前方法,但它通过 GetEnumerator() 返回一个真正的类(而非 IEnumerator),且此类中的 Current 属性为 int 类型。

然而执行此操作后,我要确保在不支持该模式的语言中仍然可以使用这种基于接口的方法。我将复制编写的上一个测试并修改 foreach 以转换为接口:

            foreach (int value in (IEnumerable) list)

只需少许改动,列表即可在两种情况下正常运行。请查看代码样例以获取更多细节和更多测试。

几点说明
为本月的专栏文章编写代码和文字大约花了我一个小时的时间。事先编写测试的优点就是您可以对在类中添加哪些内容以使测试通过有一个清楚的认识,从而简化代码的编写。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

44/4<1234

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网