Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在单元测试中不能访问该类?_C#_Unit Testing - Fatal编程技术网

C# 为什么在单元测试中不能访问该类?

C# 为什么在单元测试中不能访问该类?,c#,unit-testing,C#,Unit Testing,我已经为一个名为game.cs的类中的方法创建了一个单元测试。由于某种原因,当我引用该类时,我无法创建新实例。如何使该类可访问,以便测试代码 文件层次结构和解决方案: BowlingKataTDD项目: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BowlingKataTDD {

我已经为一个名为game.cs的类中的方法创建了一个单元测试。由于某种原因,当我引用该类时,我无法创建新实例。如何使该类可访问,以便测试代码

文件层次结构和解决方案:

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)
        {
        }
    }
}

将类
公开
,以及需要外部调用的该类的任何成员(例如通过单元测试):


您看不到这些类的原因是它们是非公共的(默认情况下是内部的)

有两种解决方案:

  • 如果您希望使您的类对外部用户可见,请将它们公开
  • 如果您不想发布您的类
要使用第二种解决方案,请打开
AssemblyInfo.cs
并添加以下行:

[assembly: InternalsVisibleTo("BowlingKataTDDTest")]

BowlingKataTDDTest
是项目文件中定义的程序集名称。

这是使用新项目调用库时的常见错误,我能够解决它。通常很容易忘记将修改器从VisualStudio中的项目更改为public,因为默认情况下,新的项目模板创建类,但没有将其设置为public。将游戏类更改为public时,我可以实例化游戏对象

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();
        }
    }
}

如何使用
InternalsVisibleTo
属性,这是一个类修饰符吗?@JDavila这个技巧对于测试您不想公开的类和方法非常有用。很高兴知道,这在测试时非常有用,谢谢!
[assembly: InternalsVisibleTo("BowlingKataTDDTest")]
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();
        }
    }
}