2016-08-12 81 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(); 
     } 
    } 
} 
相关问题