Sou*_*abh 1 java junit static-methods mockito
我最近在与JUnit和Mockito合作开发TDD.出于某种方法,我正在使用Util类(在项目上下文中具有方法的实用程序类).我面临的问题是如何在Mockito中模拟这些类.我无法在Mockito中找到关于静态方法的实现.有人建议在Mockito上使用PowerMock,但不会取代我的JunitMockitoRunner吗?
我使用静态函数的方式是:
public void doSomething(int x){
//Some code
Y y = Util.someStaticMethod(x);
//Some more code
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也读到某处使用静态方法是代码气味,是一个糟糕的设计的标志.那么我应该如何重构设计以及我将获得哪些优势呢?
我应该如何重构设计以及我将获得哪些优势呢?
好吧,如果你需要模拟静态实用程序方法,那么使它成为一个可注入对象的实例方法,这样你就可以注入这个对象的模拟实现.优点是它使您的代码更易于测试:
public class Util {
public Y someInstanceMethod(X x) {
...
}
}
public class ClassToBeTested {
private Util util;
public ClassToBeTested(Util util) {
this.util = util;
}
public void doSomething(int x){
//Some code
Y y = util.someInstanceMethod(x);
//Some more code
}
}
public class ClassToBeTestedTest {
public void testDoSomething() {
Util mockUtil = mock(Util.class);
ClassToBeTested t = new ClassToBeTested(mockUtil);
when(mockUtil.someInstanceMethd(3)).thenReturn(...);
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是依赖注入的主要卖点:它使您的代码可测试.
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |