C#单元测试代码问题继续存在

时间:2010-04-26 16:02:55

标签: c# unit-testing

此处提出问题之后的更多问题:C# unit test code questions

我发现VS单元测试测试框架以同样的方式处理privateprotected方法,但不同于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.");
        }

的问题:

  1. [DeploymentItem("SystemSoftware.exe")]适用于privateprotected方法,为什么需要它以及它的用途是什么?

  2. 在我的原始类/文件中,如果我指向原始方法并尝试“Find All References”。单元测试类/文件中的引用不会显示在privateprotected方法中,但会显示所有public方法。这是为什么?是不是?

3 个答案:

答案 0 :(得分:2)

  

[DeploymentItem( “SystemSoftware.exe”)]   适用于私人和受保护的方法,   为什么需要它以及它的用途是什么?

您不能从不同程序集中的单元测试访问私有,受保护或内部成员,并且不会从您尝试测试的类继承(如果您的“单元”也不可能被测试不仅仅是一个类)。要访问私有,受保护或内部成员,MSTest框架将生成一个访问者程序集,使您可以访问这些隐藏成员的代理。

DeploymentItemAttribute指示测试运行器需要部署哪些工件(以及访问器程序集或测试数据文件等依赖项),以便正确执行代码。从本质上讲,它隐式告诉MSTest框架在这种情况下生成和部署一个访问器程序集。

  

在我的原始类/文件中,如果我指出   到原来的方法,并尝试   “查找所有参考文献”。参考资料   在单元测试类/文件中不会   出现私人和受保护   方法,但它会出现在所有人   公共方法。这是为什么?是吗   正确?

见上文,您不是直接访问它们,而是使用代理来执行此操作。此代理使用运行时反射来绑定您的调用,因此无法在Visual Studio中跟踪。

答案 1 :(得分:1)

  

[DeploymentItem(“SystemSoftware.exe”)]适用于私有和受保护的方法,为什么需要它以及它的用途是什么?

它定义(文件)测试需要的资源(您可以应用于测试类或单个方法)。由于测试方法必须公开,我无法理解为什么要将其应用于privateprotected方法。

记录属性:http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

答案 2 :(得分:1)

Find All References将无法找到这些测试,因为他们使用访问者类(User_Accessor)代替真实类(User)来访问protected和{{1 }} 方法。访问者类是自动生成的,并做一些技巧来暴露那些通常不可访问的方法。