如何使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

Feed4JUnit 与 JUnit

经常,在应用程序的业务逻辑中存在大量的这样的接口:他们接受不同的输入,然后进行 或验证,或处理,进而完成相同的流程。比如网站的登录入口,用户名和密码都有长度的限制,同时也具有是否允许特殊字 符的限制等,所以在我们进行其单元测试的过程中,根据不同长度的用户名和密码,以及不同的字符组合,只需要提供相同 的测试代码结构,就能完成测试,不同的仅仅测试数据与期望值,但是因为每一个测试方法中的输入参数不同,我们必须为 每一个输入组编写单独的测试用例,从而产生大量冗余代码,十分不便于维护。

基于以上场景,JUnit 4 提供了参 数化的特性,从而能够实现不同数据输入对相同测试代码的测试,如清单 1 所示:

清单 1. JUnit 4 参数化测试代 码示例

package sample.test;

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import sample.code.UserAccess;

/*
 * JUnit - Parameter test sample
 */
@RunWith(Parameterized.class)
public class JunitSample {

    private String user;
    private String pw;
    private boolean expected;

    @Parameters
    public static Collection dataGenerater() {
        return Arrays.asList(new Object[][] {
                { "user01", "123456", true },
                { "helloworld", "123456", false },
                { "david", "re*ads", false },
                { "goodone", "onegood", true } });
    }

    public JunitSample(String user, String pw, boolean expected) {
        this.user = user;
        this.pw = pw;
        this.expected = expected;
    }

    @Test
    public void testAccessCheck() {
        assertEquals(expected, UserAccess.accessCheck(user, pw));
    }
}

通过以上示例代码可以看出,JUnit 4 通过使用一个标记 @Parameters 注释的返回类型为 Collection 的静态 方法产生数据,测试数据通过变量传递给测试方法,从而完成多数据输入的测试。但是随着业务的需要,测试人员需要经常 增加测试数据与修改现有测试数据,JUnit 4 提供的硬编码方式已经愈显笨重和不便,数据与代码分离显得尤为重要。

幸好,本文所述的 Feed4JUnit 良好的解决了数据与代码分离的问题,Feed4JUnit 是 JUnit 测试框架的扩展,它 通过操作来自于文件以及不同的数据源的测试数据,使您的单元测试变得更容易编写与维护。

本文将通过示例向您 展示 Feed4JUnit 的安装以及测试代码与数据分离的实现,请注意本文的示例代码全部基于针对如下一个十分简单用户登录 检验的类,并且假定您正在使用 Eclipse 作为您的 IDE,请看清单 2 类代码:

清单 2. 实例类

package 

sample.code;

public class UserAccess {
    // simple validation for user name and password
    public static boolean accessCheck(String userName, String password) {
        if (userName.length() <= 4 || userName.length() > 8)
            return false;
        if (password.length() <= 4 || password.length() > 8)
            return false;
        if (userName.contains("@"))
            return false;
        if (password.contains("*"))
            return false;
        return true;
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 测试
, junit
, 单元测试
, 代码
, import
, JUnit java 测试
, 不同
Arrays简单示例
junit单元测试、idea junit单元测试、maven junit单元测试、java junit单元测试、junit4单元测试实例,以便于您获取更多的相关知识。

时间: 2024-10-28 09:39:51

如何使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试的相关文章

ASP关于页面和代码分离的问题

代码分离|问题|页面|代码分离     为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松.       在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点:    1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范:    2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护.       那么,要如何才能避免

使用PHP4中的 IntegratedTemplate类实现HTML和PHP代码分离

代码分离 使用PHP编程的人都会碰到这样一个问题:当PHP代码和HTML代码在一起的时候,看PHP代码很费劲,整个文件也无法用Dreamweaver来编辑,这对于PHP程序员和美工来讲,修改这样的文件就象一个噩梦. PHP中的模板(Template)技术就是为了解决这个问题而出现的.PHP模板类有很多,比较常见的是 FastTemplate 和 PHPLib, 因为出现得早,在PHP编程界名声很大.PHP程序员不知道这两个类,就象VB程序员不知道MsgBox函数一样,是一件不可思议的事情. 以前

关于页面和代码分离的

代码分离|页面 为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松. 在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点: 1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范: 2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护. 那么,要如何才能避免这些麻烦呢? 答案就是使用模板文件,将ASP代码和HTML页

《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换

asp.net|代码分离 在Visual Studio中开发Web项目,Web 窗体页由两部分组成:视觉元素(HTML.服务器控件和静态文本)和该页的编程逻辑. 一般将这两个组成部分分别存储在一个单独的文件中.可视元素在一个 .aspx 文件中创建,而代码位于一个单独的类文件中(.aspx.vb 或 .aspx.cs).或者有时候也会在同一文件中创建视觉元素和代码. 而在Asp.Net Forums的Web窗体页中没有找到我们熟悉的.aspx.cs文件,也没有发现任何C#代码,取而代之是一个个控

高并发之Memcached实战第10课-“Memcached Get获取数据”部分代码分享2

高并发之Memcached实战第10课-"Memcached Get获取数据"部分代码分享2 一.Memcached客户端读写在同一个程序的逻辑: MemcachedClient mcc = new MemcachedClient(list); if(mcc.get("something")==null) { if(!DataFactory.Exist(somethingObject)) { DataFactory.StoreInDB(somethingObject

使用ASP.NET中的一点体会[关于代码分离]

asp.net|代码分离     最近在进行项目开发中,经常会遇到这种情况,就是当用户点击页面上的Button时,系统需要弹出一个窗口.这个窗口可能是标准对话框,也可能是一个新的页面.开始的时候我不知道如何实现这样的功能,按照我以前的编程习惯,我认为应该有一个类似于ShowMessage的方法,但是,可惜这种方法在WEB下是没有的.通过在网上查阅资料,发现一般的做法是在Button的OnClick事件中写下如下代码:   private void Button1_Click(object sen

程序员上看来的文章,也是关于页面和代码分离的

程序|程序员|代码分离|页面 为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松.     在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点:    1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范:    2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护.        那么,要如何才能避免这些麻烦呢?

表示代码与逻辑代码分离

代码分离 <%@ Page Inherits="MyCodeBehind" Src="c2.vb" %> There is a nice section in the quickstart docs on this topic also. Click here to read up on it! Here is the code This example uses the following MS-SQL Server 7.0 database Stor

老外的代码分离办法

代码分离 index.asp-----------------------------------------------------------------------<!--#include file="templateclass.asp"--><%' This is the code used to load and display the template.' See how clean it is!!! :)sub go()dim oTemplate set