2016-08-12 196 views
3

我創建了一個名爲game.cs的類中的方法的單元測試。出於某種原因,當我參考這個類時,我無法創建一個新的實例。如何讓這個類可訪問,以便我可以測試我的代碼?爲什麼在單元測試中不能訪問該類?

文件層次和解決方案:

enter image description here

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using BowlingKataTDD; 

namespace BowlingKataTDDTest 
{ 
    [TestClass] 
    public class BowlingKataTDDUnitTests 
    { 
     [TestMethod] 
     public void DoesGameExist() 
     { 
      //arrange 
      BowlingKataTDD. 
     } 
    } 
} 

BowlingKataTDD項目:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace BowlingKataTDD 
{ 
    class Game 
    { 
     static void Main(string[] args) 
     { 
     } 
    } 
} 

回答

5

您看不到這些類的原因是它們是非公開的(默認爲內部)。

有兩個解決辦法:

使用第二個解決方案,開放AssemblyInfo.cs,並添加以下行:

[assembly: InternalsVisibleTo("BowlingKataTDDTest")] 

BowlingKataTDDTest是您的程序集的名稱,在項目文件中定義。

+0

如何使用'InternalsVisibleTo'屬性,是一個類修飾符? – JDavila

+0

太棒了,這也適用! – JDavila

+0

@JDavila這個技巧對於測試您不想公開的類和方法非常有用。 – dasblinkenlight

6

使類public,以及哪些需要在外部調用這個類的任何成員(如通過單元測試):

public class Game 
{ 
    public static void Main(string[] args) 
    { 
    } 
} 
+0

好抓住,謝謝! – JDavila

0

這是使用新項目調用庫時的常見錯誤,我能夠解決它。通常很容易忘記將修改器從Visual Studio中的項目更改爲公共,因爲默認情況下,新項目模板會創建類,但不會將其設置爲public。將Game類更改爲public時,可以實例化Game對象。

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using BowlingKataTDD; 

namespace BowlingKataTDDTest 
{ 
    [TestClass] 
    public class BowlingKataTDDUnitTests 
    { 
     [TestMethod] 
     public void DoesGameExist() 
     { 
      //arrange 
      BowlingKataTDD.Game game = new BowlingKataTDD.Game(); 
     } 
    } 
} 
相關問題