知识点小结:
在本次练习中重点关注的是当测试代码中出现需要打桩的方法包含不同参数内容(1个参数)时的灵活打桩处理。
如代码中提到的file.compareTo(String name)方法,其中name可能为不同的值,如果需要在桩中根据name的值来灵活打桩,应该如何处理呢?
方法就是需要进行参数比对。在桩方法的查找匹配过程中,需要考虑args参数的利用。
桩声明:public Object stubsAnalyze0(java.lang.reflect.Member, Object _this, Object[] args)    
其中存在一个参数项: Object[] args 。需要提取这个args数据并进行必要的判断处理,如下所示:   
if(Stubs.matches( method, “compareTo”)){
File file = (File) args[0]; //这里以compareTo为例,其中参数为一个File类型。
if(file.getName().equals(name))
return new Integer(100);
return new Integer(-1);
}
被测代码:
package com.parasoftchina.jteststub;
 
import java.io.File;
 
public class FileExample {
 
    public static String analyze (File file){
        StringBuffer tmp = new StringBuffer();
 
        tmp.append(file.getAbsolutePath());
        tmp.append(':');
        tmp.append(file.setLastModified(100L));
        tmp.append(':');
        tmp.append(file.compareTo(new File("X001.txt")));
        tmp.append(':');
        tmp.append(file.compareTo(new File("XXX")));
        tmp.append(':');
 
        return tmp.toString();
    }
}
测试用例和桩代码:
/*
* FileExampleTest.java
* 在16-5-20 9:51:27上被Jtest创建.
*/
package com.parasoftchina.jteststub;
import jtest.Report;
import jtest.Stubs;
import java.lang.reflect.Member;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import com.parasoftchina.jteststub.FileExample;
import java.io.File;
/**
* FileExampleTest is a test class for FileExample
*
* @see com.parasoftchina.jteststub.FileExample
* @author Parasoft Jtest 9.6
*/
public class FileExampleTest extends PackageTestCase {
/**
* Constructor for test class.
*
* @author Parasoft Jtest 9.6
*/
public FileExampleTest() {
/*
* This constructor should not be modified. Any initialization code
* should be placed in the setUp() method instead.
*/
}
/**
* Test for method analyze(java.io.File).
* @throws Throwable
*             Tests may throw any Throwable
*
* @see FileExample#analyze(java.io.File)
* @author Parasoft Jtest 9.6
*/
@Test
public void testAnalyze0() throws Throwable {
File file = new File("file");
String result = FileExample.analyze(file);
Report.submitMessage(result);
}
/**
* 当运行 testAnalyze0 方法时指定使用的桩方法。
* @param method 被调用的方法或构造方法
* @param _this 对应于此方法的对象实例或者
*        <code>null</code> 对应静态方法
* @param args 传递给该方法的参数
* @return 使用的桩方法的桩返回值或者 <code>Stubs.NO_STUB_GENERATED</code>
*        指定不应该被打桩的方法调用。
* @throws Throwable 桩方法可以抛出的任何异常
* @author kwang
*/
public Object stubsAnalyze0(Member method, Object _this, Object[] args) throws Throwable {
if(Stubs.matches(method, File.class)){
if(Stubs.matches(method,"getAbsolutePath"))
return "C:\\Case\\a.txt";
if(Stubs.matches(method, "setLastModified")){
long time = ((Long)args[0]).longValue();
if(time<0)
throw new IllegalArgumentException("time is "+ time);
return new Boolean(true);
}
if(Stubs.matches(method, "compareTo")){
File file = (File) args[0];
if(file.getName().equals("X001.txt"))
return new Integer(100);
else 
return new Integer(0);
}
return Stubs.NO_STUB_GENERATED;
}
return Stubs.NO_STUB_GENERATED;
}
/**
* Used to set up the test. This method is called by JUnit before each of
* the tests are executed.
* @author Parasoft Jtest 9.6
*/
@Before
public void setUp() throws Exception {
/*
* Add any necessary initialization code here (e.g., open a socket).
* Call Repository.putTemporary() to provide initialized instances of
* objects to be used when testing.
*/
super.setUp();
// jtest.Repository.putTemporary("name", object);
}
/**
* Used to clean up after the test. This method is called by JUnit after
* each of the tests have been completed.
* @author Parasoft Jtest 9.6
*/
@After
public void tearDown() throws Exception {
try {
/*
* Add any necessary cleanup code here (e.g., close a socket).
*/
} finally {
super.tearDown();
}
}
/**
* Utility main method. Runs the test cases defined in this test class.
* Usage: java FileExampleTest
* @param args
*            command line arguments are not needed
* @author Parasoft Jtest 9.6
*/
public static void main(String[] args) {
// junit.textui.TestRunner will print the test results to stdout.
org.junit.runner.JUnitCore.main("com.parasoftchina.jteststub.FileExampleTest");
}
/**
* Get the class object of the class which will be tested.
* @return the class which will be tested
* @author Parasoft Jtest 9.6
*/
public Class getTestedClass() {
return FileExample.class;
}
}
// JTEST_CURRENT_ID=863432002.

转载于:https://www.cnblogs.com/kwang-cai/p/5548801.html

Java Stub 研究学习(2)相关推荐

  1. java stub_Java Stub 研究学习(2)

    知识点小结: 在本次练习中重点关注的是当测试代码中出现需要打桩的方法包含不同参数内容(1个参数)时的灵活打桩处理. 如代码中提到的file.compareTo(String name)方法,其中nam ...

  2. 2022年Java程序员学习规划图

    2022年Java初级程序员的学习路线图: 入门基础:Java SE基础-->Java Web(含数据库+H5+js+vue) 中级技术:Maven-->Git-->SSM框架 -- ...

  3. JAVA音频研究5:音频播放器(javax.sound学习指南,javax.sound学习实战)

    本代码将调用javax.sound库,讲解如何播放音频 得到能够使用的简易音频的播放器 本文可作为javax.sound学习指南,javax.sound学习实战等进行参考 相关内容请看下方代码与注释 ...

  4. 用 Java 训练深度学习模型,原来这么简单

    作者 | DJL-Keerthan&Lanking 来源 | HelloGitHub 头图 | CSDN下载自东方IC 前言 很长时间以来,Java 都是一个很受企业欢迎的编程语言.得益于丰富 ...

  5. 转载:一位资深程序员大牛给予Java初学者的学习路线建议

    一位资深程序员大牛给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来 ...

  6. java程序员学习路线以及我的学习经验

    本文作者为优知学院创始人陈睿(mike),作者有10年以上技术&产品经验,曾任百度研发经理.携程定制旅游CTO. " 这是一篇完整的java程序员学习线路图,一共分为六个阶段. 我以 ...

  7. 转载一篇不错的文章:谈谈“野生”Java程序员学习的道路

    逛论坛看到的一篇不错的文章,特此转载:本文转载自:左潇龙  原文链接:点击打开链接 引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想 ...

  8. 菜鸟入门:Java程序员学习之路

     1. Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  9. 一位资深程序员大牛给予Java初学者的学习建议

    这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要 ...

最新文章

  1. 五款漂亮的 GNOME 3.4 主题-PPA
  2. Java LinkedList对象的clone()方法和示例
  3. linux root密码激活,Linux - root初始密码设置
  4. 易经读书笔记18山风蛊
  5. 适应关键业务环境的加湿系统
  6. 信息系统项目管理师备考指南
  7. 基于私有云的数据库高可用架构实践
  8. 用nginx转发请求tomcat 如何配置访问日志获取真实ip
  9. 如何使用使用PS批量制作字幕
  10. winpe安装windows2003,硬盘winpe安装windows2003,无光驱硬盘安装windows2003
  11. 香山芯片调试目标完成,直播完毕
  12. layui 模板引擎用法小结
  13. 基本内置类型 声明与定义 static与entern const auto register volatile
  14. Plant Ecology Journal Club, 2018
  15. 万网绑定二级域名_为网站子目录绑定二级域名
  16. SpringBoot服务监控之Actuate
  17. HBase 常用操作
  18. fixed脱离文档流 不占位置
  19. 辰奕智能在创业板过会:计划募资约4亿元,约有五成来自境外
  20. 31次课(iptables filter表案例、iptables nat表应用)

热门文章

  1. Altair HW FEKO+WinProp 2020中文版
  2. 洛谷——P3807 【模板】卢卡斯定理
  3. python中sorted和.sorted 、reversed和reverse的使用
  4. Django与数据库操作
  5. Python之路,day22-BBS基础
  6. (winform cookie)如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证...
  7. C#日期格式化(转)
  8. 多线程(一、线程安全案例)
  9. Amazon DynamoDB 入门2:工作原理、API和数据类型介绍
  10. 集成显卡+独立显卡实现三屏显示