该工具主要为了减少单测编写中的重复工作。目前完成的版本为basic_function,实现了对常见格式的语句生成对应的PowerMock代码。
-
使用命令
java -jar back_scratcher.jar y/n
运行jar包,其中参数n/y代表是否添加注释。 -
将要mock的语句粘贴到输入栏
-
生成的代码会输出在屏幕,同时会自动复制在剪切板上不需要手动复制。
-
输入
exit
退出程序。
- 该程序生成的代码是基于PowerMock框架的,所以需要使用者熟悉PowerMock的写法。
- 该程序目前不能直接对一个方法进行自动生成(这是未来努力的目标),只能对具有一定格式的代码进行mock。
- 程序只负责生成一定格式的代码,具体程序执行流程还需要使用者自身控制。如对Stream流的控制,Map容器中取值的控制。
-
A a, B b, C c
生成代码:
A a = mock(A.class); B b = mock(B.class); C c = mock(C.class);
说明:
这种格式说明是某个方法的入参,分别对每个单独的
X x
进行mock。 -
List<ClassA> list = b.function(arg1);
生成代码:
List<ClassA> list = new ArrayList<>(); ClassA classA = mock(ClassA.class); list.add(classA); doReturn(list).when(b).function(any());
说明:
返回值是
List
类型的代码,会自动往定义的list中塞入一个mock好的对象。 -
Optional<ClassA> optional = b.function(arg1);
生成代码:
ClassA classA = mock(ClassA.class); Optional<ClassA> optional = Optional.of(classA); doReturn(optional).when(b).function(any());
说明:
返回值是
Optional
类型的代码,默认往容器中塞入一个mock的对象。 -
ClassA<ClassB> a = b.function(arg1);
生成代码:
ClassB classB = mock(ClassB.class); ClassA<ClassB> a = mock(ClassA.class); doReturn(a).when(b).function(any());
说明:
返回值是带有泛型且不是上述的
List
或Optional
。
-
ClassA a = b.function(arg1, arg2);
生成代码:
ClassA a = mock(ClassA.class); doReturn(a).when(b).function(any(), any());
-
a = b.function(arg1);
生成代码:
A a = mock(A.class); doReturn(a).when(b).function(any());
说明:
对于语句中没有体现返回类型的代码,默认类型为返回变量名的大驼峰形式。
-
b.function(arg);
生成代码:
doNothing().when(b).function(any());
说明:
代码中没有体现返回值,默认认为该方法返回类型为
void
-
ClassA a = function(arg1);
生成代码:
ClassA a = mock(ClassA.class); doReturn(a).when(spy, "function", any());
说明:
这种格式一般说明
function()
为这个类的private方法,所以需要利用powermock对私有方法进行mock,在生成语句之前需要使用者自己添上对该类的spy语句。 -
a = function(arg1);
生成代码:
A a = mock(A.class); doReturn(a).when(spy, "function", any());
-
function(arg);
doNothing().when(spy, "function", any());
-
-
ClassA a = ClassB.function(arg1);`
生成代码:
ClassA a = mock(ClassA.class); doReturn(a).when(ClassB.class, "function", any());
说明:
这种格式说明
function()
是ClassB
中的静态方法。 -
a = ClassB.function(arg1);
生成代码:
A a = mock(A.class); doReturn(a).when(ClassB.class, "function", any());
-
ClassB.function();
生成代码:
doNothing().when(ClassB.class, "function");