C# 为什么在单元测试中不能访问该类?
我已经为一个名为game.cs的类中的方法创建了一个单元测试。由于某种原因,当我引用该类时,我无法创建新实例。如何使该类可访问,以便测试代码 文件层次结构和解决方案: BowlingKataTDD项目: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 {
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();
}
}
}