`
lovelease
  • 浏览: 385999 次
社区版块
存档分类
最新评论

JUnit 3.8 通过反射测试私有方法

阅读更多
测试私有(private)的方法有两种:
1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳
2)通过反射 (推荐)
代码演示:
目标程序
PrivateMethod.java
package com.junit3_8;
public class PrivateMethod {
//私有方法
private int add(int a, int b)
{
return a +b ;
}
}
测试程序
PrivateMethodTest.java
package com.junit3_8;
import java.lang.reflect.Method;
import junit.framework.Assert;
import junit.framework.TestCase;
public class PrivateMethodTest extends TestCase {
public void testAdd() throws Exception
{
//PrivateMethod pm = new PrivateMethod();
//获取目标类的class对象
Class<PrivateMethod> class1 = PrivateMethod.class;
//获取目标类的实例
Object instance = class1.newInstance();
//getDeclaredMethod() 可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
//getMethod() 只可获取公共的方法
Method method = class1.getDeclaredMethod("add", new Class[]{int.class,int.class});
//值为true时 反射的对象在使用时 应让一切已有的访问权限取消
method.setAccessible(true);
Object result = method.invoke(instance, new Object[]{1,2});
Assert.assertEquals(3, result);
}
}

小结:
getDeclaredMethod() 可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
getMethod() 只可获取公共的方法
Method method = class1.getDeclaredMethod("add", new Class[]{int.class,int.class});
等价于
Method method = class1.getDeclaredMethod("add", new Class[]{Integer.TYPE,int.Integer.TYPE});
因为 Integer.TYPE 表示基本类型 int 的 Class 实例

原文连接:http://blog.csdn.net/hzc543806053/article/details/7340546
分享到:
评论

相关推荐

    JUnit3.8的初步学习

    通过分析和运行这些示例,你可以更深入地理解如何使用JUnit3.8进行单元测试,如何编写有效的测试用例,以及如何组织测试类。 总的来说,JUnit3.8是Java开发中的基石之一,它为开发者提供了一种结构化、高效的方式来...

    junit3.8jar以及源码以及测试案例详解.rar

    本资源包含`junit3.8.jar`库文件、源代码及测试案例,旨在帮助开发者全面了解并熟练掌握Junit 3.8的使用方法和精髓。 首先,`junit3.8.jar`是Junit 3.8的核心库文件,包含了运行和编写单元测试所需的所有类和方法。...

    JUnit3.8(三)

    3. 固定测试(Fixed Tests):JUnit3.8支持固定的测试,即`@FixMethodOrder`注解可以确保测试方法按照特定顺序执行,这对于依赖特定顺序的测试场景很有帮助。 4. 集成断言(Assertions):JUnit提供了丰富的内置...

    浪曦][原创]Junit.3.8.详解续二.rar

    6. **固定测试(Fixture)**:在Junit 3.8中,测试前后的准备和清理工作通常通过setup()和tearDown()方法实现,这些方法会在每个测试方法执行前后自动调用。 7. **测试监听器**:Junit 3.8允许我们定义测试监听器,...

    junit3.8 和junit4 api

    在JUnit 3中,初始化和清理工作是通过`setUp()`和`tearDown()`方法实现的,它们会在每个测试方法之前和之后自动调用。 4. **测试套件(Test Suites)**:通过`@Suite`注解创建,但这是JUnit 4的特性。在JUnit 3中,...

    Junit 3.8 详解(一)

    2. **测试套件(Test Suites)**:通过定义一个类来组合多个测试类,JUnit 3.8支持测试套件的概念,这样可以一次性运行多个测试类,提高了测试的效率。 3. **断言(Assertions)**:JUnit 提供了一系列的断言方法,...

    Junit3.8_API_chm

    Junit3.8 API CHM Junit3.8 API CHM Junit3.8 API CHM Junit3.8 API CHM Junit3.8 API CHM

    JUNIT3.8學習筆記(1)

    在JUnit3.8中,测试方法通常通过`@Test`注解来标识。虽然这个注解在后续版本中得到了更多的扩展,但在3.8中,它只是简单地标记一个方法为测试方法。例如: ```java public class MyTest { @Test public void ...

    浪曦][原创]Junit.3.8.详解续一.rar

    6. **忽略测试**:尽管Junit 3.8没有提供显式的@Ignore注解,但可以通过在测试方法上抛出IgnoreException来跳过某个测试。 7. **测试运行器(Test Runners)**:虽然不直观,但Junit 3.8的测试运行器通常是通过...

    JUnit4利用反射机制测试类的私有成员

    本文将介绍如何使用JUnit4结合Java的反射机制来测试类的私有成员。 首先,我们需要理解Java的反射机制。反射是一种在运行时分析类、接口、字段和方法的能力。它允许我们动态地获取类的信息并对其进行操作,包括访问...

    junit测试private函数

    本篇文章将详细介绍如何利用Java的反射机制在JUnit中测试私有函数。 首先,了解Java反射的基本概念。反射允许我们在运行时检查类、接口、字段和方法的信息,并能动态地调用方法或访问字段。在Java中,`java.lang....

    junit-3.8.1.jar资源

    开发者可以通过继承`junit.framework.TestCase`类并定义包含测试逻辑的方法来创建测试用例。 2. **断言方法**:JUnit提供了丰富的断言方法,如`assertEquals()`、`assertTrue()`、`assertNull()`等,用于验证代码的...

    Junit 3.8.2

    对于更复杂的测试场景,JUnit 3.8.2提供了`@BeforeClass`和`@AfterClass`注解,这两个方法在整个测试类中只运行一次,分别在所有测试之前和之后执行,适合处理一次性的设置和清理任务。 在实际使用中,我们可以通过...

    Junit测试Void方法

    综上所述,通过上述方法,我们可以有效地使用 Junit 对 `void` 类型的方法进行测试,确保它们的行为符合预期。这种方法的关键在于设计一个辅助方法来间接获取 `void` 方法的信息,并利用这些信息进行测试。

    JUnit3.8.1

    2. 测试套件(Test Suites):JUnit 3.8.1支持通过创建一个测试类来组织和运行多个测试类,这被称为测试套件。它允许用户一次性运行多个测试类或单个测试方法。 3. 断言(Assertions):JUnit提供了丰富的断言方法...

    对私有方法进行单元测试

    首先,我们可以利用反射机制来访问和测试私有方法。Java的`java.lang.reflect.Method`类提供了获取类的私有方法并执行它们的能力。通过这种方式,我们可以创建一个测试用例,直接调用私有方法并检查其结果。例如,在...

    在Eclipse中使用JUnit4进行单元测试

    测试结果会在JUnit视图中显示,包括测试用例的数量、通过的测试、失败的测试和错误。 为了更好地组织测试,可以使用`@RunWith`注解配合测试运行器(如`Parameterized`或`Suite`),实现参数化测试和组合测试。参数...

    junit3.8.1.rar

    - **测试注解**:在JUnit 3中,测试方法并没有像后来的版本那样通过注解标识,而是通过继承`TestCase`类并重写`runTest()`方法来实现。 - **断言**:JUnit提供了各种断言方法(如`assertEquals()`, `assertTrue()`...

    Junit4.4&3.8.1.rar

    2. **测试套件(Test Suites)**:通过`@Suite`注解,JUnit 3允许将多个测试类组合成一个测试套件,便于批量运行。 3. **异常测试**:JUnit提供了断言方法如`assertEquals()`和`assertNull()`来验证预期结果。3.8.1...

Global site tag (gtag.js) - Google Analytics