• 如何测试私有方法?(TDD)


    在.net 1.1下一个比较好的方法是(经寒枫提示)
    using System;

    namespace idior
    {
        
    public class Tested
        
    {
           
    #if (DEBUG)
            
    public
    #else 
            
    private 
    #endif
                
    string PrivateMethod(string str)
            
    {
                 
    //do something
                 return str;
            }

        }

    }
    在.net 2.0下又多了一种方法 partial class
    原来的类不变
    namespace idior
    {
        
    public partial class Tested
        
    {
            
    private string PrivateMethod(string str)
            
    {
                
    //Do something
                return str;
            }

        }

    }
    再为测试写一个class
    namespace idior
    {
        [TestFixture]
        
    public partial class Tested
        
    {
            Tested tested;
            [SetUp]
            
    public void Setup()
            
    {
                tested 
    = new Tested();
            }

            [Test]
            
    public void TestPrivateMethod()
            
    {
                Assert.AreEqual(tested.PrivateMethod(
    "hello"), "hello");
            }


        }

    }

    这两种方法各有优缺点
    1  优点:源文件不用引入nunit.framework.dll
        缺点:有一定危险,因为当该类被其他类使用的时候,会把这个私有方法当成public
    2. 优点:没有危险
        缺点:会引入nunit.framework.dll当然你可以把它放到其他文件夹,发布时删除不过麻烦.

    还有一个方法就是使用反射,你又会使用哪种?

    方法三:
    为要测试的类添加一个继承的子类.在子类中实现Get方法实现对私有成员的访问.如果在Java中还可以将这个
    子类设为Test中的Inner Class.
    优点: 比反射安全,比前面的方法简单.
    缺点: private 变量要变成protected

    体会:
    XUnit只是通过验证interface.主要思想对某个方法的输入验证它的输出.这种黑盒的测试工具能很大程度上保证
    代码的安全,并能驱动开发.但是对于方法的执行过程缺少控制,可能需要更加细致的测试工具来实现对方法的
    执行过程的测试(这里仍然指得是程序员测试)虽然这种情况不是非常多.AOP或许能为实现这种测试作出贡献.

  • 相关阅读:
    使用Power Query从Web页面获取图像到Power BI报告中
    视频 |【2019】Power BI 8月产品功能更新讲解
    【2019】微软Power BI 每月功能更新系列——Power BI 8月版本功能完整解读
    视频 |【2019】Power BI 7月产品功能更新讲解
    2019 年 BI 平台 Top 14
    2016 黑客必备的Android应用都有哪些?
    J2EE完全手册(二)
    JavaBean ,Enterprise Bean(EJB), 三种Bean, 以及POJO
    J2EE完全手册(一)
    J2EE简介
  • 原文地址:https://www.cnblogs.com/idior/p/102110.html
Copyright © 2020-2023  润新知