• Jtest Stub研究学习(3)


    知识小结:
    本次练习中重点关注了构造方法的打桩处理之一,以及对于包含多个参数类型的处理。
     
    构造方法和多个参数的打桩处理:
         这里根据构造方法的类型即可判断处理,并且可以利用Jtest提供的API makeStubObject(java.lang.Class class)来自动构造对象返回,这里使用该API的好处是可以针对多种复杂情况处理,可以不需要调用原构造方法来返回,或者一些未实现的接口情况,使用这种情况更容易处理。《参见Jtest Stub研究学习(1)中详解》
     
    参考代码:大概逻辑和API调用顺序如下:
    if(Stubs.matches(java.lang.Member method, java.lang.Class cl))
         Class[] argument_types = new Class[]{String.class, String.class}; // 这里的String.class可能是其他只,需要考虑构造方法的参数类型填入合适值
         if(Stubs.matches(method, argument_types))
              return Stubs.makeStubObject(cl);
     
     
    待测代码:
    package com.parasoftchina.jteststub;
     
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
     
    public class ConstructorExample {
     
        public static long getFileLength(String path) throws IOException{
            RandomAccessFile file = new RandomAccessFile(path, "rw");
     
            return file.length();
        }
     
    }
     
    测试用例和桩代码:
    /*
     * ConstructorExampleTest.java
     * 在16-5-20 10:31:15上被Jtest创建.
     */
     
    package com.parasoftchina.jteststub;
     
    import org.junit.Before;
    import org.junit.After;
    import org.junit.Test;
    import java.lang.reflect.Member;
    import jtest.Stubs;
    import java.io.RandomAccessFile;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import com.parasoftchina.jteststub.ConstructorExample;
     
    /**
     * ConstructorExampleTest is a test class for ConstructorExample
     *
     * @see com.parasoftchina.jteststub.ConstructorExample
     * @author Parasoft Jtest 9.6
     */
    public class ConstructorExampleTest extends PackageTestCase {
     
        /**
         * Constructor for test class.
         *
         * @author Parasoft Jtest 9.6
         */
        public ConstructorExampleTest() {
            /*
             * This constructor should not be modified. Any initialization code
             * should be placed in the setUp() method instead.
             */
     
        }
     
        /**
         * Test for method getFileLength(java.lang.String).
         * 
         * @throws Throwable
         *             Tests may throw any Throwable
         *
         * @see ConstructorExample#getFileLength(java.lang.String)
         * @author Parasoft Jtest 9.6
         * 
         */
        @Test
        public void testGetFileLength0() throws Throwable {
            long result = ConstructorExample.getFileLength("Mr. Bob Smith");
            assertEquals(5L, result); // jtest_unverified
            // No exception thrown
            // jtest_unverified
        }
     
        /**
         * 当运行 testGetFileLength0 方法时指定使用的桩方法。
         * 
         * @param method
         *            被调用的方法或构造方法
         * @param _this
         *            对应于此方法的对象实例或者 <code>null</code> 对应静态方法
         * @param args
         *            传递给该方法的参数
         * @return 使用的桩方法的桩返回值或者 <code>Stubs.NO_STUB_GENERATED</code> 指定不应该被打桩的方法调用。
         * @throws Throwable
         *             桩方法可以抛出的任何异常
         * @author Parasoft Jtest 9.6
         * @throws FileNotFoundException 
         */
        public Object stubsGetFileLength0(Member method, Object _this, Object[] args) throws FileNotFoundException{
            Class [] argument_types;
            if(Stubs.matches(method,RandomAccessFile.class)){
     
                    argument_types = new Class[]{String.class, String.class};
                    if(Stubs.matches(method, argument_types)){
                        //return new RandomAccessFile("C:\Case\test.xml", "rw");
                        return Stubs.makeStubObject(RandomAccessFile.class);
                    }
                /*    argument_types = new Class[]{}; // the first way to stub length
                    if(Stubs.matches(method, "length", argument_types))
                        return new Long(5L);*/
                    //return Stubs.NO_STUB_GENERATED;
     
            }
            if(Stubs.matches(method, "length")) // the second way to stub length
                return new Long(5L);
     
            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 ConstructorExampleTest
         * 
         * @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.ConstructorExampleTest");
        }
     
        /**
         * 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 ConstructorExample.class;
        }
    }
    // JTEST_CURRENT_ID=-1375974269.
     
     
  • 相关阅读:
    js-实现点击按钮直接打印
    XMLHTTPREQUEST–获取上传文件的进度
    The prop 'history' is marked as required in 'Router', but its value is 'undefined'.in Router
    javascript之闭包,递归,深拷贝
    node之get与post
    css公共样式
    php之创建jsonp接口调数据
    javascript之创建对象的方式
    angular之两种路由
    php之上传图片及传数据到mysql
  • 原文地址:https://www.cnblogs.com/kwang-cai/p/5576948.html
Copyright © 2020-2023  润新知