If条件的单元测试用例

时间:2017-07-05 09:57:46

标签: c#

我有一个方法IsValid

public void IsValid(string applicationNumber)
{
    if (!applicationNumber.Length.Equals(15))
    {
        throw new ApplicationException(string.Format("De lengte van de rubriek: aanvraagnummer [001.], met waarde {0}, is niet valide.", applicationNumber));
    } else {
        applicationNumberExpression = "qwerty123456789";

        if (!applicationNumberExpression.IsMatch(applicationNumber))
        {
            throw new ApplicationException(string.Format("Het aanvraagnummer [001.] met waarde {0} is niet conform de voorgeschreven structuur.", applicationNumber));
        }
    }
}

我尝试为isvalid编写单元测试用例,但是我遇到了一些错误。

public void IsValidTestApplicationNumber()
{
    var appno1 = new MFA.Convana.BusinessLayer.ObjectModel.ApplicationNumber();

    MFA.Convana.BusinessLayer.ObjectModel.ApplicationNumber appno = new 
    MFA.Convana.BusinessLayer.ObjectStore.ApplicationNumber();

    string applicationNumber = "qwerty123456789";

    Assert.AreSame(appno.IsValid(applicationNumber);//error in thisline "no overload for method takes one argument"
}

3 个答案:

答案 0 :(得分:1)

您的主要错误是尝试在返回void的函数上断言。这是不可能的。

您有两种选择:

a)将IsValid保留为返回void,并替换:

Assert.AreSame(appno.IsValid(applicationNumber);

使用:

appno.IsValid(applicationNumber);

b)更改IsValid以返回bool。为此,请更改:

Assert.AreSame(appno.IsValid(applicationNumber);

要么:

Assert.IsTrue(appno.IsValid(applicationNumber));

(取决于您希望测试做什么)

另外,改变:

public void IsValid(string applicationNumber)
{
    if (!applicationNumber.Length.Equals(15))
    {
        throw new ApplicationException(string.Format("De lengte van de rubriek: aanvraagnummer [001.], met waarde {0}, is niet valide.", applicationNumber));
    } else {
        applicationNumberExpression = "qwerty123456789";

        if (!applicationNumberExpression.IsMatch(applicationNumber))
        {
            throw new ApplicationException(string.Format("Het aanvraagnummer [001.] met waarde {0} is niet conform de voorgeschreven structuur.", applicationNumber));
        }
    }
}

为:

public bool IsValid(string applicationNumber)
{
    if (!applicationNumber.Length.Equals(15))
    {
        throw new ApplicationException(string.Format("De lengte van de rubriek: aanvraagnummer [001.], met waarde {0}, is niet valide.", applicationNumber));
    } else {
        applicationNumberExpression = "qwerty123456789";

        if (!applicationNumberExpression.IsMatch(applicationNumber))
        {
            throw new ApplicationException(string.Format("Het aanvraagnummer [001.] met waarde {0} is niet conform de voorgeschreven structuur.", applicationNumber));
        }
    }
    return true;
}

答案 1 :(得分:0)

  

方法没有重载需要一个参数

显然错误说明了一切......
Assert.AreSame(appno.IsValid(applicationNumber), /*TO WHAT SHOULD IT BE COMPARED*/);

Assert.AreSame(appno.IsValid(applicationNumber), false);

编辑: 将此答案扩展为更加准确和主题。

您尝试比较两个值但使用引用比较器(Assert.AreSame)。

这可能会失败,因为2个引用不相同(read about references here)。

您应该做的是比较两个。为此,您必须使用不同的断言方法。

对于您的示例,如果您希望自己的方法返回Assert.IsTruetrue,如果预期值为Assert.IsFalse,则可以使用false

bool result = meObj.IsValid("someString");
// let's say you're expecting false
Assert.IsFalse(result);
// but if you're expecting true then change IsFalse to IsTrue

或者您可以使用AreEqual,在您的情况下Assert.AreEqual<bool>

bool result = meObj.IsValid("someString");
bool expected = false;
Assert.AreEqual(expected, result);

答案 2 :(得分:0)

[识别TestClass]     公共类UnitTest_MailClient     {

    [TestMethod]
    public void IsValid_TestApplicationNumber()
    {

        MFA.Convana.BusinessLayer.ObjectModel.ApplicationNumber appno = new MFA.Convana.BusinessLayer.ObjectStore.ApplicationNumber();

        String Input;
        String exception;
        String TestCase;

        XMLHelper TestData = new XMLHelper();
        TestCase = TestData.GetTestDataString("IsValid");
        String[] arr = TestCase.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        if (arr.Length > 0 && TestCase.Length > 0)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Input = arr[i].Substring(0, arr[i].IndexOf(TestData.FieldDelimiter));
                exception = arr[i].Substring(arr[i].IndexOf(TestData.FieldDelimiter) + 3);
                try
                {
                    appno.IsValid(Input);
                    Assert.IsTrue(true);                           
                }
                catch (Exception ex)
                {
                  Assert.AreEqual(exception, ex.Message);
                }
            }
        }
        else
        {
            Assert.Inconclusive("Test Skipped as no test data");
        }
    }