zoukankan      html  css  js  c++  java
  • junit测试延伸--私有方法测试

    关于junit测试的延伸,这里有类概念级别的测试,继承类的测试,接口的测试,抽象类的测试,关于这些类级别的测试,这里我就不做多的赘述了。

    关于上面的几个测试就是说,我们不应该单纯的去测试类中的一些方法,而且要测试类的状态,也就是那些属性状态。我个人觉得没太大必要,实际编码测试中我们直接测试方法的正确性就够了,一个类的状态是通过方法来改变的,

    所以正确的初始化后基本不会有太大问题。这里我要整理的是一个类中私有方法的测试。

    很多人说类的私有方法不用测试,理由是类私有方法只允许被本类访问,而其他类无权调用。事实上并非如此。我们在写一个类的时候经常会封装一些私有方法,然后只能在自己的类中使用。但是用private修饰的私有方法在外部类不能

    被访问,那么假如我们想测试,那怎么办呢? 简单,利用反射绕开Java的语言访问检查。

    这里我举个例子:

    package org.linkinpark.junit.testjunit;
    
    /**
     * @创建作者: LinkinPark
     * @创建时间: 2016年2月5日
     * @功能描述: 写一个测试源码,然后里面封装一个私有方法
     */
    public class Linkin
    {
    	private String test(String str)
    	{
    		return str + "。。。";
    	}
    
    }
    

    OK,现在我们来写上面这个私有方法的测试类:

    package org.linkinpark.junit.testjunit;
    
    import java.lang.reflect.Method;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class TestTest
    {
    
    	@Test
    	public void test() throws Exception
    	{
    		Linkin test = new Linkin();
    		Class<Linkin> clazz = Linkin.class;
    		Method declaredMethod = clazz.getDeclaredMethod("test", String.class);
    		declaredMethod.setAccessible(true);
    		Object invoke = declaredMethod.invoke(test, "LinkinPark");
    		declaredMethod.setAccessible(false);
    		Assert.assertEquals("LinkinPark。。。", invoke);
    	}
    
    }
    


    我们运行上面的测试,来看下junit绿条情况。OK,测试通过,没问题。



  • 相关阅读:
    [ZJOI2008]树的统计 树链剖分
    CF915E 动态开线段树
    Poj 2114 Boatherds(点分治)
    Poj 2599 Godfather(树的重心)
    Bzoj 2152: 聪聪可可(点分治)
    Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)
    Cogs 329. K- 联赛(最大流)
    Cogs 731. [网络流24题] 最长递增子序列(最大流)
    Bzoj 2282: [Sdoi2011]消防(二分答案)
    Cogs 732. [网络流24题] 试题库(二分图)
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232878.html
Copyright © 2011-2022 走看看