2015-06-29 80 views
2

您好我有一個簡單的方法如下,需要知道我可以在Visual Studio如何調用公共靜態方法在單元測試

public class myClass 
{ 
    public static bool Test(string value, string regex) 
    { 
     if (Regex.IsMatch(value, regex, RegexOptions.IgnoreCase)) 
      return true; 

     return false; 
    } 
} 

這裏稱之爲單元測試是我SOFAR

[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

是類'public'? – jessehouwing

+0

沒有,它不是,它像MyClass類{ – user1429595

+1

爲什麼你在測試框架代碼嗎? – leppie

回答

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

我想細化最後一句話:如果' ClassContainingTest'是'private'或'internal',被測試的庫是一個可重用的API或組件,測試它是沒有意義的。如果你的整個庫被標記爲'Internal'並且被測代碼沒有被重用,那麼爲它編寫一個測試可能是有意義的,因爲調用它的唯一其他代碼可能是一個應用程序邊界,如UI或服務層。做這個集成測試是沒有意義的。 – jessehouwing

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法正常工作

+0

感謝您的答案我需要添加[assembly:InternalsVisibleTo(「myClassLibrary」)]?在我的testMethod上面? – user1429595

+0

在包含類「myClass」的項目的AssemblyInfo.cs中。另請參閱:https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx#remarks – jessehouwing

相關問題