如何在单元测试中调用公共静态方法

时间:2015-06-29 16:17:01

标签: c# .net unit-testing visual-studio-2012

您好我有一个简单的方法如下,需要知道如何在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);

 }

2 个答案:

答案 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);

如果myClassprotected,您可以这样做:

public myClassWrapper : myChild
{ 
    public static bool Test(string text, string regex)
    {
        return myClass.Test(text, regex);
    }
}

如果myClassinternal或“default”(未指定可见性,这似乎是您的情况),您可以使包含myClass的程序集友好通过向其添加InternalsVisisbleTo属性来测试库:

[assembly:InternalsVisibleTo("myClassLibrary")]

这样,您的测试项目应该能够直接调用测试方法,就好像它是公开的一样。

如果类不是公共的,或者您无法更改类的定义,请考虑查找内部使用您要测试的方法的方法,并使用该方法来验证行为。 (例如,测试使用Test方法的方法是否正常工作,从而测试Test方法是否正常工作。