【问题标题】:Using the testing tools, need to write a function that makes the test cases pass for IndexOf with a string and a character使用测试工具,需要编写一个函数,使测试用例通过 IndexOf 一个字符串和一个字符
【发布时间】:2018-11-17 10:05:36
【问题描述】:

我正在参加 QA 方法学课程,我们正在使用 Visual Studio 中的测试工具。我有老师要我们实现的测试用例:

str      c     Result
________________________

null    'a'   Exception
" "     'a'   -1
"a"     'b'   -1
"a"     'a'    0
"a..."  'b'   -1
"a..."  'a'    0
"ba.."  'b'    0
"a..b"  'b'    999,999,999

这是在 C# 中完成的,我本季度也将参加(不知道它会成为 QA 课程的一部分,否则我会等一个季度)我有为 1-7 编写的测试方法.我有一个 8 的,但它不太正确。这方面的建议会很有帮助。

这是我的代码:

using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTesting
{
    [TestClass]
    public class Helper
    {
        //Part 2 of Assignment
        public static int IndexOf(string s, char c)
        {
            while ()
            {
                return ...;
            }

            return -1;
        }

        //Test cases - part 3 of assignment
        //s = null, c = 'a', expected output = Exception
        [TestMethod]
        [ExpectedException(typeof(ArgumentNullException))]
        public void TestMethod1()
        {
            Helper.IndexOf(null, 'a');
        }

        //s = " ", c = 'a', expected outout = -1
        [TestMethod]
        public void TestMethod2()
        {
            Assert.AreEqual(-1, Helper.IndexOf("", 'a'));
        }

        //s = "a", c = 'b', expected outout = -1
        [TestMethod]
        public void TestMethod3()
        {
            Assert.AreEqual(-1, Helper.IndexOf("a", 'b'));
        }

        //s = "a", c = 'a', expected outout = 0
        [TestMethod]
        public void TestMethod4()
        {
            Assert.AreEqual(0, Helper.IndexOf("a", 'a'));
        }

        //s = "aaaaaa", c = 'b', expected outout = -1
        [TestMethod]
        public void TestMethod5()
        {
            Assert.AreEqual(-1, Helper.IndexOf("aaaaaa", 'b'));
        }

        //s = "aaaaaa", c = '', expected outout = 0
        [TestMethod]
        public void TestMethod6()
        {
            Assert.AreEqual(0, Helper.IndexOf("aaaaaa", 'a'));
        }

        //s = "baaaaa", c = 'b', expected outout = 0
        [TestMethod]
        public void TestMethod7()
        {
            Assert.AreEqual(0, Helper.IndexOf("baaaaa", 'b'));
        }

        ////s = "a...b", c = 'b', expected outout = 999999999
        //[TestMethod]
        //public void TestMethod8()
        //{
        //    string str = "aa";
        //    for (int i = 1; i <= 999999990; i++)
        //    {
        //        str.Insert(i, "a");
        //    }
        //    str.Insert(999999991, "b");
        //    Assert.AreEqual(999999991, Helper.IndexOf(str, 'b'));
        //}
    }
}

测试方法 8 被注释掉,因为它导致了超出范围的异常。

我已经用这个功能尝试了几件事。在课堂上,老师特别提到了一个while循环。对于找不到字符的结果,说明还需要其中的“return -1”。

我不知道如何编写 while 循环。我尝试使用 .Contains,循环没有正确结束。我有一种感觉,它真的很简单,但它只是我无法企及的。我在 while 循环中有返回值,因为在我看来,除了 -1 之外,还需要找到字符的结果,

我很抱歉这很简单,但我真的可以求助于更有 C# 经验的人的帮助。我会去学校的辅导实验室,但它周末不开放,下周放假,我的工作安排很糟糕。

提前谢谢你。

【问题讨论】:

    标签: c# qa


    【解决方案1】:

    根本不需要循环,你可以使用

    string str = new string('a', 99999999) + "b";
    

    【讨论】:

    • 这比循环好多了,但是现在我得到了一个内存不足的异常,所以看起来测试用例可能会导致问题,哈哈。可能必须让它拉异常才能通过。
    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2019-10-01
    • 2017-08-23
    相关资源
    最近更新 更多