|
What this is
Other links
The source code// $Id: TestModelFacade3.java,v 1.6 2004/09/24 20:17:24 mvw Exp $ // Copyright (c) 2003-2004 The Regents of the University of California. All // Rights Reserved. Permission to use, copy, modify, and distribute this // software and its documentation without fee, and without a written // agreement is hereby granted, provided that the above copyright notice // and this paragraph appear in all copies. This software program and // documentation are copyrighted by The Regents of the University of // California. The software program and documentation are supplied "AS // IS", without any accompanying services from The Regents. The Regents // does not warrant that the operation of the program will be // uninterrupted or error-free. The end-user understands that the program // was developed for research purposes and is advised not to rely // exclusively on the program for any reason. IN NO EVENT SHALL THE // UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF // THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE // PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, // UPDATES, ENHANCEMENTS, OR MODIFICATIONS. package org.argouml.model; import junit.framework.*; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; /** * This TestCase dynamically generates a suite of tests to throw * arguments at each method in the ModelFacade to check whether they * throw an IllegalArgumentException. */ public class TestModelFacade3 extends TestCase { private Method methodToTest = null; private ModelFacade facade = null; /** * Creates one of the test cases. * * @param method to be tested. */ public TestModelFacade3(Method method) { super(method.toString()); methodToTest = method; } /** * @return the test suite */ public static Test suite() { TestSuite suite = new TestSuite("Tests for " + TestModelFacade.class.getPackage().getName()); Method methods[] = ModelFacade.class.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { suite.addTest(new TestModelFacade3(methods[i])); } return suite; } /** This method checks whether a test should be executed for a given * method. * @return true if method is not eligible for testing (e.g. helper methods) */ protected boolean methodForbidden() { return methodToTest.getName().equals("getClassNull") || methodToTest.getName().startsWith("isA") || methodToTest.getName().equals("create"); } /** * @see junit.framework.TestCase#runTest() */ protected void runTest() throws Throwable { if (!methodForbidden()) { if (methodToTest.getParameterTypes() != null && methodToTest.getParameterTypes().length >= 1 && Modifier.isPublic(methodToTest.getModifiers()) ) { testOneOrMoreParameters(); } } } /** testOneOrMoreParameters checks whether a public method in the * ModelFacade throws an IllegalArgumentException when invoked with * stupid arguments. Stupid arguments are arguments which are not * from the UML domain, such as a plain Object. */ public void testOneOrMoreParameters() { int nrParameters = methodToTest.getParameterTypes().length; Class[] params = methodToTest.getParameterTypes(); Object[] foo = new Object[nrParameters ]; // set up all parameters. Some methods are invoked with // primitives or collections, so we need to create them // accordingly for (int i = 0; i < nrParameters; i++) { try { if (params[i].isPrimitive()) { String primitiveName = params[i].getName(); if (primitiveName.equals("int")) foo[i] = new Integer(0); if (primitiveName.equals("boolean")) foo[i] = new Boolean(true); if (primitiveName.equals("short")) foo[i] = new Short("0"); } else if (params[i].getName().equals("java.util.Collection")) { foo[i] = new ArrayList(); } else { // this call could easily fall if there is e.g. no // public default constructor. If it fails tweak the // if/else tree above to accomodate the parameter // or check if we need to test the particular method // at all. foo[i] = params[i].newInstance(); } } catch (InstantiationException e) { fail("Cannot create an instance of : " + params[i].getName() + ", required for " + methodToTest.getName() + ". Check if " + "test needs reworking."); } catch (IllegalAccessException il) { fail("Illegal Access to : " + params[i].getName()); } } try { methodToTest.invoke(facade, foo); fail(methodToTest.getName() + " does not deliver an IllegalArgumentException"); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof IllegalArgumentException) { return; } fail("Test failed for " + methodToTest.toString() + " because of: " + e.getTargetException()); } catch (Exception e) { fail("Test failed for " + methodToTest.toString() + " because of: " + e.toString()); } } /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); facade = new ModelFacade(); assertNotNull("Cound not get ModelFacade", facade); } } |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.