我有一个方法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"
}
答案 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.IsTrue
或true
,如果预期值为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");
}
}