单元测试初识-1

来源:互联网 发布:人工智能软件 编辑:程序博客网 时间:2024/06/14 03:42

     测试驱动开发(TDD),呵呵,在现行的项目中好像走不通。一来时间紧,项目质量是排在按期完工之后的。二来三五个人,几台晒羊的电脑,需要完成设计,UI,编码,后期的测试,根本无法做到敏捷的测试驱动开发。因此,我们需要重新的去反思和定位,junit能给我们带来什么。

     在junit中,是通过Assert断言来判断测试成败的,就是说一段测试代码后,通过Assert一个equals,或者Assert一个NotNull就判定了测试是否返回绿条了。貌似跟软件测试的“黑盒”思想同源。

     在javaEE项目中,通常会有很多封装的方法,又比如n个数据源的连接的try-catch代码,这些可以独立出来的模块需要保持稳定,以给其他模块提供稳定的支撑。比如前几天LDAP服务器挂了,导致邮件发送不出去,而try-catch块只能抛出addNode-Error:  LDAPException这么一个异常信息,这个信息起码对应了4种以上可能。最后与其他模块的人联调,与linux服务器SA联调,排除了大半天才找到原来是服务器连接失败。。。重启一把服务器就搞定,根本与代码无关。

下面就是LDAP增加一个节点的操作代码(抛LDAPException异常有好几个可能,其中就包括服务器连接失败)

    public static boolean addNode(LDAPEntry newEntry)    {
        
boolean result = false;
        LDAPConnection lc 
= new LDAPConnection();
        
try {
            
// connect to the server
            lc.connect(ldapHost, ldapPort);
            
// authenticate to the server
            lc.bind(ldapVersion, loginDN, password.getBytes("UTF8"));
            lc.add(newEntry);
            logger.debug(
" Added object: " + newEntry.getDN()
                    
+ " successfully.");
            result 
= true;
            
// disconnect with the server
            lc.disconnect();
            
return result;
        }
 catch (LDAPException e) {
            logger.error(
"addNode-Error:  LDAPException");
            
return result==true?true:false;
        }
 catch (UnsupportedEncodingException e) {
            logger.error(
"addNode-Error: UnsupportedEncodingException");
            
return result;
        }

 

将其中的服务器连接模块拿出来,做个junit测试:

import static org.junit.Assert.fail;

import org.junit.Test;

import com.novell.ldap.LDAPConnection;

import junit.framework.Assert;

public class LDAPTest {

    
private static final int ldapPort = 389;

    
private static final int ldapVersion = LDAPConnection.LDAP_V3;

    
private static final String ldapHost = "192.168.1.92";

    
private static final String loginDN = "cn=root,o=cbc,c=CH";

    
private static final String password = "12345";
    
    @Test
    
public void ConnectionTest() {
        LDAPConnection lc 
= new LDAPConnection();
        
            
// connect to the server
            try {
                lc.connect(ldapHost, ldapPort);
                
// authenticate to the server
                lc.bind(ldapVersion, loginDN, password.getBytes("UTF8"));
                
//Assert.assertTrue(true);
                fail("connect error");
            }
 catch (Exception e) {
                Assert.assertNull(e);
            }

    }

    
}

    测试代码只包含了连接服务器逻辑,并去捕获连接过程中的异常的根类Exception。通过这么一个稳定的单元测试模块,使得在LDAP的CRUD等操作中一旦出现异常,我就可以很快的找出是不是因为服务器连接挂了而引起的,不用急着去检查是不是由于其他代码修改引发的bug。

    因此,给项目的一些基石,比如某个排序算法,远程接口调用,数据库连接,以及调用别人的service的地方 编写一个junit测试类,将极大的方便后续扩展时候的测试,也方便出bug能迅速的排除一些故障。

原创粉丝点击