• 如何测试私有方法?(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或许能为实现这种测试作出贡献.

  • 相关阅读:
    央视好节目整理
    IT项目各阶段管理
    使用mint-ui Loadmore组件时出现报错
    简单了解map,filter,some,every,forEach,for in,for of,find,用法
    h5简单学习总结
    video标签详解(转载)
    浏览器对象
    获取后三天的时间
    Map和Set以及iterable类型集合的循环遍历
    placeholder的样式设置
  • 原文地址:https://www.cnblogs.com/idior/p/102110.html
Copyright © 2020-2023  润新知