- 解压自动生成单元测试.rar , 解压后的文件复制到eclipse的plugins目录
- 重启eclipse
- 选中要java代码,右键,点击生成测试代码,配置模板
配置mockito模板
1.配置mockito标签
复制下面代码到
<#include
'Function.ftl'
>
<#include
'Header.ftl'
>
<#include
'Body.ftl'
>
|
2.配置mockito 下的function
复制下面代码到
<#function genNewJavaTypeExpr paramClazz varName>
<#local result>
<#compress>
<#
if
(paramClazz.
interface
)>
<#
if
paramClazz.name?ends_with(
"java.util.List"
)>
List ${varName} =
new
ArrayList();
<#elseif paramClazz.name?ends_with(
"java.util.Map"
)>
Map ${varName} =
new
HashMap();
<#elseif paramClazz.name?ends_with(
"java.util.Set"
)>
Set ${varName} =
new
HashSet();
<#elseif paramClazz.name?ends_with(
"java.util.Queue"
)>
Queue ${varName} =
new
LinkedList();
<#
else
>
${paramClazz.simpleName} ${varName} = Mockito.mock(${paramClazz.simpleName}.
class
);
</#
if
>
<#elseif (paramClazz.simpleName==
'boolean'
)>
boolean
${varName} =
true
;
<#elseif (paramClazz.array)>
${paramClazz.simpleName} ${varName} =
new
${paramClazz.simpleName}{};
<#elseif (paramClazz.primitive)>
${paramClazz.simpleName} ${varName} =
1
;
<#elseif (paramClazz.simpleName==
'String'
)>
String ${varName} =
"abc"
;
<#
else
>
${paramClazz.simpleName} ${varName} <#
if
!paramClazz.
enum
>=
new
${paramClazz.simpleName}()</#
if
>;
</#
if
>
</#compress>
</#local>
<#
return
result>
</#function>
<#macro genJunitAssert returnType>
<#
if
(returnType.name==
"void"
)>
<#
return
>
</#
if
>
<#
if
(returnType.name==
"boolean"
||returnType.simpleName==
"Boolean"
)>
assertTrue(resultObj);
<#
return
>
</#
if
>
assertNotNull(resultObj);
<#
if
(returnType.array)>
assertTrue(
"must be not empty"
,resultObj.length >
0
);
<#
return
>
</#
if
>
<#
if
(returnType.
interface
)>
<#
if
returnType?ends_with(
"java.util.List"
)>
assertFalse(
"must be not empty"
,resultObj.isEmpty());
<#elseif returnType?ends_with(
"java.util.Map"
)>
assertFalse(
"must be not empty"
,resultObj.isEmpty());
<#elseif returnType?ends_with(
"java.util.Queue"
)>
assertFalse(
"must be not empty"
,resultObj.isEmpty());
<#elseif returnType?ends_with(
"java.util.Set"
)>
assertFalse(
"must be not empty"
,resultObj.isEmpty());
</#
if
>
</#
if
>
</#macro>
<#function genMockType paramType>
<#local result>
<#compress>
<#
if
(paramType.simpleName==
'boolean'
)>
anyBoolean()
<#elseif (paramType.simpleName==
'int'
)>
anyInt()
<#elseif (paramType.simpleName==
'long'
)>
anyLong()
<#elseif (paramType.simpleName==
'byte'
)>
anyByte()
<#elseif (paramType.simpleName==
'short'
)>
anyShort()
<#elseif (paramType.simpleName==
'float'
)>
anyFloat()
<#elseif (paramType.simpleName==
'double'
)>
anyDouble()
<#elseif (paramType.simpleName==
'String'
)>
anyString()
<#elseif ((paramType.
interface
)&¶mType.name?ends_with(
"java.util.List"
))>
anyList()
<#elseif ((paramType.
interface
)&¶mType.name?ends_with(
"java.util.Map"
))>
anyMap()
<#elseif ((paramType.
interface
)&¶mType.name?ends_with(
"java.util.Set"
))>
anySet()
<#
else
>
any(${paramType.simpleName}.
class
)
</#
if
>
</#compress>
</#local>
<#
return
result>
</#function>
|
3.配置mockito 下的header
复制下面代码到
/**
* huifu.com Inc.
* Copyright (c) 2004-2011 All Rights Reserved.
*/
package
${MyPackageName};
import
java.util.Map;
import
java.util.List;
import
java.util.ArrayList;
import
static
org.junit.Assert.*;
import
org.junit.After;
import
org.junit.Before;
import
org.junit.Test;
import
org.junit.runner.RunWith;
import
org.mockito.InjectMocks;
import
org.mockito.Mock;
import
static
org.mockito.Mockito.*;
import
org.mockito.runners.MockitoJUnitRunner;
<#list pc.importClass as importClazz>
import
${importClazz.name?replace(
"$"
,
"."
)};
</#list>
|
4. 配置body
复制模板代码
/**
*
* @author ***
* @version $Id: ${MyClassName}.java, v 0.1 ${curDate} *** Exp $
*/
@RunWith
(MockitoJUnitRunner.
class
)
public
class
${MyClassName}{
/** test object */
@InjectMocks
protected
${genNewJavaTypeExpr(pc,pc.simpleName?uncap_first)}
<#include
'MockField.ftl'
>
<#include
'TestMethods.ftl'
>
<#include
'SetupTeardown.ftl'
>
}
|
5. 配置MockField
复制模板代码
<#list pc.injectedFields as prop>
<#
if
!prop.type.name?starts_with(
"java"
) && !prop.type.primitive>
@Mock
${prop.type.simpleName} ${prop.name?uncap_first};
</#
if
>
</#list>
|
6.配置TestMethods
复制模板代码
<#-- init function -->
<#list pc.methods as method>
<#
if
(!method.propertyMethod && !(method.objectMethod && !method.overrided)) >
//test ${pc.simpleName}.${method.name}(<#list method.parameters as param>${param.type.name}<#if param_has_next>, </#if></#list>)
@Test
public
void
test_${method.name}()
throws
Throwable{
<#list method.parameters as param>
${genNewJavaTypeExpr(param.type, param.name)}
</#list>
<#
if
(method.returnType.name==
"void"
)>
${pc.simpleName?uncap_first}.${method.name}(<#list method.parameters as param>${param.name}<#
if
param_has_next>, </#
if
></#list>);
<#elseif (method.returnType.array)>
${method.returnType.simpleName} resultObj = ${pc.simpleName?uncap_first}.${method.name}(<#list method.parameters as param>${param.name} <#
if
param_has_next>,</#
if
></#list>);
<#
else
>
${method.returnType.simpleName?replace(
"$"
,
"."
)} resultObj = ${pc.simpleName?uncap_first}.${method.name}(<#list method.parameters as param>${param.name} <#
if
param_has_next>,</#
if
></#list>);
</#
if
>
<
@genJunitAssert
method.returnType />
<#list method.statements as statement>
//TODO ${statement}
</#list>
}
</#
if
>
</#list>
|
7.配置setup Teardown 模板
复制模板代码
@Before
public
void
setUp()
throws
Exception {
<#list pc.injectedFields as prop>
<#list prop.type.declaredMethods as method>
<#
if
(!method.propertyMethod && !method.objectMethod && pc.quotedMethods?seq_contains(prop.name+
"_"
+method.name+
"_"
+method.parameters?size))>
<#
if
(method.returnType.simpleName!=
"void"
)>
//Mock function ${prop.name}->${method.name}
${genNewJavaTypeExpr(method.returnType,method.name+
'Res_1'
)}
when(${prop.name?uncap_first}.${method.name}(<#list method.parameters as param><#
if
param.type.array>any(${param.type.simpleName}.
class
)
<#
else
>${genMockType(param.type)}</#
if
><#
if
param_has_next>,</#
if
></#list>)).thenReturn(${method.name+
'Res_1'
});
</#
if
>
</#
if
>
</#list>
</#list>
}
@After
public
void
tearDown() {
}
mockito代码生成
1.mockito 代码生成
2.选择mockit生成 点击开始生成