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

  • 相关阅读:
    matplotlib基础汇总_04
    【C语言】输入一个三位数,逆序输出
    利用 Termux 配合 ksweb 进行内网穿透
    【安卓开发】AndroidStudio项目提交到github最详细步骤
    【安卓开发】启动另一个 Activity
    【安卓开发】AS神奇的报错:Cannot find AVD system path. Please define ANDROID_SDK_ROOT
    【安卓开发】按钮点击事件
    【Python】我的第一个EXE程序
    【Python】pyinstaller安装失败的解决办法
    OI生涯回忆录(未完毕)
  • 原文地址:https://www.cnblogs.com/idior/p/102110.html
Copyright © 2011-2022 走看看