知识点小结:

在本次练习中重点关注的是当测试代码中出现需要打桩的方法包含不同参数内容(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 对应于此方法的对象实例或者

*        null 对应静态方法

* @param args 传递给该方法的参数

* @return 使用的桩方法的桩返回值或者 Stubs.NO_STUB_GENERATED

*        指定不应该被打桩的方法调用。

* @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.

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

  1. Java Stub 研究学习(2)

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

  2. Java小白零基础学习如何突破自己的方法

    有很多Java程序员在学习之初经常对如何学习感到困惑.本文将分析如何学习Java编程,并相信它可以帮助处于混乱状态的初学者. I.培养兴趣 兴趣是可以让你继续前进的动力.如果你只是把这个程序写成谋生手 ...

  3. python爬虫架构师之路_一位资深 架构师大牛给予Java技术提升的学习路线建议

    一位资深 架构师大牛给予Java技术提升的学习路线建议 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择. 架构师在一家公司有多重要.优秀架构师需要具备怎样的素 ...

  4. java技术栈有哪些_2020 年 Java 程序员应该学习掌握哪些技术?

    原文:2020 年 Java 程序员应该学习掌握哪些技术? 作者:java技术剑 作为一名程序员,我们面临的最大挑战是使自己保持不断学习的状态.技术变化非常快,每两年你就会看到新版本的编程语言和框架. ...

  5. Java程序员应该学习的10件清单

    作为程序员,我们最大的挑战是让自己保持最新状态.技术变化非常快,每隔几年你就会看到一个新版本的编程语言和框架出现. 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 当2021 年 ...

  6. Java反射机制再学习

    Java反射机制的学习 Java反射机制的学习 转自:http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html 总结的很到位,记录下 ...

  7. Java反射机制的学习(3)

    Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...

  8. 人工智能 java 坦克机器人系列: 强化学习_Java坦克机器人系列强化学习

    <Java坦克机器人系列强化学习>由会员分享,可在线阅读,更多相关<Java坦克机器人系列强化学习(13页珍藏版)>请在人人文库网上搜索. 1.Java 坦克机器人系列 强化学 ...

  9. 人工智能 java 坦克机器人系列: 强化学习_人工智能 Java 坦克机器人系列: 强化学习...

    人工智能 Java 坦克机器人系列: 强化学习 发表于:2007-05-24来源:作者:点击数: 本文中,我们将使用强化学习来实现一个机器人.使用强化学习能创建一个自适应的战斗机器人.这个机器人能在战 ...

最新文章

  1. 差异表达基因火山图(ggplot函数)
  2. SAP WMSD集成之Copy WM Quantity – Not Copy WM qty as delivery qty into delivery But PGI
  3. 业界丨几张图带你看懂人工智能产业
  4. Java学习笔记:Javaweb的服务器介绍
  5. Java学习笔记12——JVM入门
  6. 卢伟冰直播拆机 或是性价比最高的骁龙855手机
  7. php sort函数,php中sort函数的功能起什么作用呢?
  8. Nginx从入门到掌握【(第3节(共3节)】
  9. python扫雷脚本_Python自动扫雷实现方法
  10. IdentityServer4【Topic】之定义资源
  11. vscode 配置 pascal环境
  12. Device owner调研
  13. 鼠标画上去图片旋转360度
  14. Python手撸机器学习系列(十六):循环神经网络RNN的实现
  15. Word——怎么在word中插入特殊符号圈4
  16. 2016.06工作日志
  17. Java面试宝典-2017
  18. CodeRush and Refactor! Pro Version 3.2.3 for Visual Studio .NET
  19. 2021年中国集成电路重点企业对比(光迅科技VS大唐电信VS士兰微VS中芯国际)[图]
  20. 闰秒(leapsecond)和原子钟(Atomic Clock)究竟是什么

热门文章

  1. 【BZOJ2758】Blinker的噩梦,扫描线+splay+链剖
  2. 【BZOJ4198】荷马史诗,贪心之k叉哈夫曼树
  3. 【BZOJ1965】【codevs1446】洗牌,快速幂+扩展欧几里德
  4. vs2017 linux工程设置头文件,使用Visual Studio 2017作为Linux C++开发工具
  5. 2017.10.5 最短母串 思考记录
  6. 2017.2.14-15自测(那些普及神题)
  7. 【英语学习】【English L06】U07 Jobs L1 A computer programmer
  8. 【英语学习】【Daily English】U12 E-World L01 Do you have Wi-Fi here?
  9. 【英语学习】【Daily English】U10 Education L01 Is this certificate a must?
  10. 【人生杂谈】生命DNA/理性思维/天才神经病