您好我有一个简单的方法如下,需要知道如何在Visual Studio的单元测试中调用它
public class myClass
{
public static bool Test(string value, string regex)
{
if (Regex.IsMatch(value, regex, RegexOptions.IgnoreCase))
return true;
return false;
}
}
这是我有什么安慰
[TestMethod]
public void TestMethod_Test()
{
string value = "myValue";
string regex = "&#@<>\s\\\$\(\)";
PrivateType pt = new PrivateType(typeof(myClass));
bool actualresult = (bool)pt.InvokeStatic("Test", new object[] { value, regex });
bool expectedResult = false;
Assert.AreEqual(actualresult, expectedResult);
}
答案 0 :(得分:5)
您不想使用反射。只需直接调用该方法:
[TestMethod]
public void TestMethod_Test()
{
string value = "myValue";
string regex = "&#@<>\s\\\$\(\)";
var result = ClassContainingTest.Test(value, regex);
Assert.AreEqual(false, result);
}
如果ClassContainingTest
不公开,那么尝试单元测试Test
是不明智的。仅测试可公开访问的功能。
答案 1 :(得分:2)
如果方法和类都是public
,那么您只需调用
myClass.Test(value, regex);
如果myClass
为protected
,您可以这样做:
public myClassWrapper : myChild
{
public static bool Test(string text, string regex)
{
return myClass.Test(text, regex);
}
}
如果myClass
为internal
或“default
”(未指定可见性,这似乎是您的情况),您可以使包含myClass
的程序集友好通过向其添加InternalsVisisbleTo
属性来测试库:
[assembly:InternalsVisibleTo("myClassLibrary")]
这样,您的测试项目应该能够直接调用测试方法,就好像它是公开的一样。
如果类不是公共的,或者您无法更改类的定义,请考虑查找内部使用您要测试的方法的方法,并使用该方法来验证行为。 (例如,测试使用Test
方法的方法是否正常工作,从而测试Test
方法是否正常工作。