Mockup always comes to us when we try to break system dependency. The conventional mockup frameworks only allowed us to mock instance methods. So the static methods usually become to the death of testability.
Of course, we still have some way to make it become testable.
1. If the static methods invoke only happens in few classes, we could create an adaptor to isolate them. The implementation of adaptor is just simply delegation.
2. Unfortunately, sometimes your legacy system maybe full of static methods calling, they scatter in different tiers.
It indeed a bad smell, but before you refactor them, you may need to make them testable firstly. Now, jmockit comes to us.
"Tests can easily be written that will mock final classes, static methods, constructors, and so on. There are no limitations."
-- jmockit
The following example shows its ability to mock static methods.
//src file
public class ServiceFactory {
public static String getAService() {
return "real service";
}
}
//test file
import mockit.Mock;
import mockit.Mockit;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class ServiceFactoryTest {
@Test
public void should_return_mock_service() {
Mockit.setUpMock(ServiceFactory.class, ServiceFactoryStub.class);
assertEquals("mock service", ServiceFactory.getAService());
}
private static class ServiceFactoryStub {
@Mock
public static String getAService() {
return "mock service";
}
}
}
Caution:
Make sure jmockit.jar appears before any JUnit jar file in the classpath. Otherwise, it will shows warning:
"WARNING: JMockit was initialized on demand, which may cause certain tests to fail;
please check the documentation for better ways to get it initialized."
分享到:
相关推荐
在Java编程语言中,`static`和`final`都是关键字,它们用于定义不同的特性,但同时也有一些相似之处。下面我们将详细探讨这两个关键字的区别和用法。 首先,`static`关键字是用来声明类级别的变量或方法,这意味着...
Mockup always comes to us when we try to ... Now, jmockit comes to us. "Tests can easily be written that will mock final classes, static methods, constructors, and so on. There are no limitations.
**Jmockit详解:单元测试中的模拟神器** Jmockit是一款强大的Java库,主要用于单元测试,尤其是模拟(mocking)和验证(verifying)对象的行为。它提供了灵活且易于使用的API,使得测试复杂的代码变得更加简单,...
- **模拟任何类或接口**:JMockit可以直接模拟任何Java类或接口,无论它们是否为final、static或包含final方法。 - **动态代理**:JMockit使用Java的动态代理机制来实现模拟,无需修改被测试代码。 - **模拟静态...
RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method. (Example: ...
类的static、const、static const、const static成员的初始化 在 C++ 编程中,static、const、static const 和 const static 是四个常见的概念,但它们的初始化方式却容易弄混淆。下面我们将对这四种成员变量的初始...
private static final String TAG = "ServiceDemo"; public static final String ACTION = "com.example.servicedemoactivity.ServiceDemo"; @Override public IBinder onBind(Intent arg0) { // TODO Auto...
静态方法(static method)是一种特殊的方法,它可以在不需要创建对象的情况下被调用。Java 中的静态方法使用 static 关键字来修饰,例如 public static void main(String[] args)。静态方法通常用于提供一些实用...
Static控件在Windows编程中是一种常见的用户界面元素,主要用于显示静态文本,比如提示信息、标题或者标签等。然而,尽管其名称为“Static”,我们也可以通过一些技术手段使其动态显示内容,例如滚动显示文本。在本...
在Java编程语言中,`static`关键字扮演着至关重要的角色,它被用于声明类成员(如变量、方法)为静态的。静态成员不依赖于任何特定的对象实例,而是与类本身绑定,这意味着无论该类有多少个实例,静态成员只会有一份...
System.out.println("Hello from static method."); } } ``` #### 3. `static`初始化块 除了变量和方法,`static`还可以修饰初始化块。`static`初始化块在类首次被加载时执行,主要用于初始化静态变量。 示例:...
System.out.println("Hello from Static Method"); } } public static void main(String[] args) { StaticMethodExample.sayHello(); // 直接调用 } ``` 3. **static修饰块** - `static`块会在类加载时...
在编程世界中,"static" 是一个非常关键的修饰符,它在 Java 语言中扮演着重要的角色。本文将深入探讨 "static" 关键字的含义、用途以及何时选择使用或不使用它。我们将通过分析《要 static 还是不要 static?》这篇...
1. **模拟(Mocking)**:它允许开发者模拟任何Java接口、类或方法的行为,无论它们是否被声明为final或static。通过模拟,可以在测试中控制依赖对象的行为,以便专注于测试目标代码的功能。 2. **验证...
静态选项背后包含了多种技术,例如 Lightmap Static、Occluder Static、Occludee Static 和 Navigation Static。这些技术都是为了优化游戏性能和大小的。 Lightmap Static 是用于生成光照贴图,使场景进行优化。...
例如,当客户端发送一个POST请求时,如果Nginx配置中没有明确允许该方法,则可能会返回405 Method Not Allowed的状态码。 #### 三、源码级修改步骤 ##### 1. 进入Nginx源码目录 首先,需要获取Nginx的源码包,并...
在您提供的信息中,标题是“visdom static脚本包”,这暗示可能遇到了在启动 Visdom 时遇到的问题,即缺少 `/visdom/static/` 目录下的必要脚本文件。 Visdom 的正常运行依赖于这个 `/static/` 目录,因为它包含了...
... static static static static static
Static和Const用的详解 static和const是C语言中两个非常重要的关键字,它们在程序设计中扮演着不同的角色。本文将详细介绍static和const的用法和特性。 static static是C语言中的一个存储类型限定符,主要用来...
"关于static关键字的总结" static 关键字是 Java 语言中一个非常重要的概念,它可以用来修饰变量、方法、内部类和代码块等。下面我们将详细介绍 static 关键字的由来、作用和用法。 一、static 关键字的由来 在 ...