享受代码,享受人生

SOA is an integration solution. SOA is message oriented first.
The Key character of SOA is loosely coupled. SOA is enriched
by creating composite apps.
随笔 - 213, 文章 - 45, 评论 - 2315, 阅读 - 121万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   idior  阅读(3248)  评论(9编辑  收藏  举报
在.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或许能为实现这种测试作出贡献.

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示