如何在单元测试中调用公共静态方法
本文关键字:静态方法 调用 单元测试 | 更新日期: 2023-09-27 18:00:31
嗨,我有一个简单的方法如下,需要知道如何在VisualStudio的单元测试中调用它
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);
}
您不希望使用反射。直接调用方法即可:
[TestMethod]
public void TestMethod_Test()
{
string value = "myValue";
string regex = "&#@<>'s'''$'(')";
var result = ClassContainingTest.Test(value, regex);
Assert.AreEqual(false, result);
}
如果ClassContainingTest
不是公共的,那么尝试对Test
进行单元测试是不明智的。仅测试可公开访问的功能。
如果方法和类都是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
方法是否正确。