此处提出问题之后的更多问题:C# unit test code questions
我发现VS单元测试测试框架以同样的方式处理private
和protected
方法,但不同于public
方法。
以下是private
方法的生成代码:
/// <summary>
///A test for recordLogin
///</summary>
[TestMethod()]
[DeploymentItem("SystemSoftware.exe")]
public void recordLoginTest()
{
User_Accessor target = new User_Accessor(); // TODO: Initialize to an appropriate value
Guid userId = new Guid(); // TODO: Initialize to an appropriate value
string action = string.Empty; // TODO: Initialize to an appropriate value
Users user = null; // TODO: Initialize to an appropriate value
AndeDBEntities db = null; // TODO: Initialize to an appropriate value
bool expected = false; // TODO: Initialize to an appropriate value
bool actual;
actual = target.recordLogin(userId, action, user, db);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
的问题:
[DeploymentItem("SystemSoftware.exe")]
适用于private
和protected
方法,为什么需要它以及它的用途是什么?
在我的原始类/文件中,如果我指向原始方法并尝试“Find All References
”。单元测试类/文件中的引用不会显示在private
和protected
方法中,但会显示所有public
方法。这是为什么?是不是?
答案 0 :(得分:2)
[DeploymentItem( “SystemSoftware.exe”)] 适用于私人和受保护的方法, 为什么需要它以及它的用途是什么?
您不能从不同程序集中的单元测试访问私有,受保护或内部成员,并且不会从您尝试测试的类继承(如果您的“单元”也不可能被测试不仅仅是一个类)。要访问私有,受保护或内部成员,MSTest框架将生成一个访问者程序集,使您可以访问这些隐藏成员的代理。
DeploymentItemAttribute指示测试运行器需要部署哪些工件(以及访问器程序集或测试数据文件等依赖项),以便正确执行代码。从本质上讲,它隐式告诉MSTest框架在这种情况下生成和部署一个访问器程序集。
在我的原始类/文件中,如果我指出 到原来的方法,并尝试 “查找所有参考文献”。参考资料 在单元测试类/文件中不会 出现私人和受保护 方法,但它会出现在所有人 公共方法。这是为什么?是吗 正确?
见上文,您不是直接访问它们,而是使用代理来执行此操作。此代理使用运行时反射来绑定您的调用,因此无法在Visual Studio中跟踪。
答案 1 :(得分:1)
[DeploymentItem(“SystemSoftware.exe”)]适用于私有和受保护的方法,为什么需要它以及它的用途是什么?
它定义(文件)测试需要的资源(您可以应用于测试类或单个方法)。由于测试方法必须公开,我无法理解为什么要将其应用于private
或protected
方法。
答案 2 :(得分:1)
Find All References
将无法找到这些测试,因为他们使用访问者类(User_Accessor
)代替真实类(User
)来访问protected
和{{1 }} 方法。访问者类是自动生成的,并做一些技巧来暴露那些通常不可访问的方法。