0 0

怎么测试一个static final void 的方法?25

LogManager类中有这样一个方法:

 

public static final void error(Logger logger, String message, Throwable cause) 

 我需要覆盖的代码:

  if (!EntityUtil.compareFieldByField(entityOPC, entityRCM)) {
        LogManager.error(logger, LogManager.format("OPC asked to create entity that already exists and has different proprties: ",e1.getMessage(), entityOPC), e1);
        /* re-throw exception - will cause RCM stop listening the OPC updates */
        throw e1;
  }

这个error方法会记录log日志,并发出一封邮件。现在我需要验证这个方法被调用,但是不知道怎么下手!

 

 

2015年1月06日 13:58

4个答案 按时间排序 按投票排序

0 0

楼上已经说了   用powermock试试。

引用
二、为什么要使用PowerMock
      现如今比较流行的Mock工具如jMock 、EasyMock 、Mockito等都有一个共同的缺点:不能mock静态、final、私有方法等。而PowerMock能够完美的弥补以上三个Mock工具的不足。


http://blog.csdn.net/jackiehff/article/details/14000779

2015年1月08日 13:34
0 0

1:有对应的日志输出说明该方法被执行了
2:

  if (!EntityUtil.compareFieldByField(entityOPC, entityRCM)) {
        LogManager.error(logger, LogManager.format("OPC asked to create entity that already exists and has different proprties: ",e1.getMessage(), entityOPC), e1);
        System.out.println("error方法被执行了......");
        /* re-throw exception - will cause RCM stop listening the OPC updates */
        throw e1;
  }

2015年1月06日 16:45
0 0

输出日志不就说明该方法被执行了吗?或者DEBUG试试?

2015年1月06日 16:08
0 0

powerMock和jmockit都可以测试静态方法和final类。
你可以用他们mock一下你的LogManager类,然后verify一下确实被调用就可以了。

另外,用AOP的技术,比如AspectJ之类的东西,可以给你的LogManager的特定方法前后植入你需要的代码,比如记录信息以供将来取得之类的。
这样的话,你在自动测试的时候可以植入AspectJ的代码供你测试用,运行环境中不植入,就可以达到相同的目的。

如果真的什么类库都不想参照的话,建议你把Static的方法委托给非Static的方法调用用来测试,当然,这样会让你修改产品程序了,你可能不太接受。

2015年1月06日 14:44

相关推荐

    static、this、super、final的JAVA用法

    final 关键字是 Java 中的一个访问修饰符,用于限制变量、方法或类的访问权限。final 变量一旦被初始化后不能被修改,final 方法不能被重写,final 类不能被继承,例如: public class FinalTest{ public static ...

    static与final的异同

    4. 使用`final`修饰一个方法,然后在子类中尝试覆盖这个方法,编译时会报错,因为`final`方法不允许被重写。 了解`static`和`final`的关键字用法对于编写健壮、可维护的Java代码至关重要。在设计类和接口时,明智地...

    java中final与static的用法

    对于引用类型,`final`保证的是引用本身不能改变,即不能指向另一个对象,但对象的内容仍然可以修改,除非这个对象自身也是`final`的。 示例: ```java final int num = 10; // 基本数据类型常量 final String str ...

    final关键字和static_用法

    当一个类被声明为`final`时,意味着这个类不能再被继承。这样的设计主要是为了保护类的设计不被外部修改,同时也避免了不必要的继承带来的潜在问题。例如,在Java的集合框架中,`String`类就是被声明为`final`的,这...

    static、final、abstract和interface使用总结

    它是一种多继承机制,一个类可以实现多个接口。接口中的所有方法默认都是抽象的(即使没有声明为abstract),且默认为public。 - **接口变量**:接口变量默认是public static final的,一旦赋值就不能改变。 - **...

    Java关键字final、static使用总结

    - 当一个方法或类被声明为`final`时,它们将失去继承和重写的能力,因此应当谨慎使用。 - `final`关键字对于提高代码的可读性和安全性有重要作用,但过度使用可能会限制软件的灵活性和扩展性。 #### 二、static...

    详解static 和 final 和 static final区别

    1. 修饰变量:如果 Static 修饰的是变量,则 JVM 会将其分配在内存堆上,该变量就与对象无关,所有对该变量的引用都指向同一个地址。因此,我们使用该变量的时候,直接指明类的静态变量,当然修饰符必须是 public。 ...

    javafinal和static总结.docx

    final 方法是不能被子类覆盖的,使用 final 方法的原因有二:第一、把方法锁定,防止任何继承类修改它的意义和实现;第二、高效。编译器在遇到调用 final 方法时会转入内嵌机制,大大提高执行效率。 例如: `...

    Java中static、this、super、final用法

    在这个例子中,`Simple.go()` 是一个静态方法,它可以在没有创建 `Simple` 类的实例的情况下被调用。 **1.2 静态变量** 静态变量是一种被所有类实例共享的变量。这意味着一旦改变静态变量的值,所有对象中的该变量...

    static & main方法 & 代码块 & final & 接口 & 内部类

    Java编程语言中的`static`, `main`方法, 代码块, `final`关键字, 接口和内部类是核心概念,对于理解和编写高效、可维护的Java程序至关重要。以下是对这些概念的详细解释: 1. **`static`关键字**: - `static`...

    static spuer final

    同样,如果一个方法被声明为`final`,则不能在子类中重写该方法。 总结起来,`static`关键字用于声明类级别的成员,它们不依赖于类的实例。`super`用于访问父类的成员,而`final`用于确保变量、方法或类的不可变性...

    JavaSE024static与final使用陷阱续..pdf

    2. **继承与静态**:如果一个类(如`Q`)继承另一个类(如`P`),并都有静态代码块,父类的静态代码块会在子类之前执行。即使子类创建了多个实例,父类的静态代码块也只会执行一次。例如: ```java public class ...

    Java中static、this、super、final用途

    在设计模式中,`final`常用于实现单例模式,保证只有一个实例存在。此外,`final`还常用于方法参数,表明参数不应该在方法内部被修改,提高代码可读性。 ### 示例 ```java class Parent { protected int value = ...

    Java中static、this、super、final用法.docx

    - **定义**:在一个类中定义一个方法为`static`,表示这个方法可以在没有创建该类的实例的情况下被调用。 - **示例**: ```java class Simple { static void go() { System.out.println("Go..."); } } ...

    Java中static、this、super、final用法.doc

    当你在一个方法或构造器中使用 `this`,它指的是调用该方法或构造器的那个对象。例如: ```java class Person { String name; Person(String name) { this.name = name; // 使用 this 引用当前对象的 name ...

    Java中static、this、super、final用途用法及实例.docx

    **Static**关键字是Java中的一个重要概念,主要用于定义类成员(包括方法和变量)为静态成员。静态成员有两个主要特点:一是它们属于类本身而非类的实例;二是无论创建多少个该类的对象,静态成员只会有一份拷贝。 ...

    Java final关键字

    当一个方法被声明为`final`时,意味着这个方法不能被子类重写。这有助于保持代码的封装性和一致性。例如: ```java public class BaseClass { public final void finalizeMethod() { System.out.println("This ...

    Test.java关于静态的分析

    public static void print(){ } //静态的块 static{ System.out.println("我是静态块,我自己调用自己"); //j++; i++; } public static void main(String[] args) { ...

Global site tag (gtag.js) - Google Analytics