Last active
August 29, 2015 14:25
-
-
Save jonatasemidio/14660736404a382c2069 to your computer and use it in GitHub Desktop.
TestGenerator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.io.FileType | |
def generateTest(String dir, String projectName) { | |
createDirectories(dir+File.separator+projectName) | |
new File(dir).eachFileRecurse(FileType.FILES) { if(it.name.contains('.java')) buildTestClasses(it.toString(), projectName)} | |
} | |
def buildTestClasses(String completeFileName, String projectName){ | |
def selectedFile = new File(completeFileName) | |
def testClassFile = new File(createNameTestFile(completeFileName, projectName)) | |
if(!testClassFile.exists()) { | |
testClassFile << buildHeadTestClass(selectedFile, testClassFile.name.replace('.java', '')) | |
selectedFile.eachLine { if( isValidMethodName(selectedFile, it) ) {testClassFile << buildTestMethods(it.split(/[ (]/)[2])} } | |
} | |
testClassFile << '}' | |
} | |
def isValidMethodName(File selectedFile, String selectedLine){ | |
if(!selectedLine.contains('//') && selectedLine.contains('(') && (selectedLine.contains('public ') || selectedLine.contains('private '))){ | |
if (!selectedFile.name.replace('.java', '').toUpperCase().equals(selectedLine.split(' ')[2].toUpperCase())) { | |
return true | |
} | |
} | |
return false | |
} | |
def buildHeadTestClass(File selectedFile, String nameTestClass) { | |
def className = selectedFile.name.replace('.java', '') | |
def headTestClass = '' | |
selectedFile.eachLine {; if( it.startsWith('package') ) headTestClass += it+'\n\n' } | |
headTestClass += 'import javax.inject.Inject;\n' | |
headTestClass += 'import org.junit.Before;\n' | |
headTestClass += 'import org.junit.Test;\n' | |
headTestClass += 'import br.com.bradseg.cadp.cadastropessoas.spring.IntegrationTest;\n' | |
def comment = | |
""" | |
/** | |
* Classe de teste para ${className} | |
* | |
* @author Bradesco Seguros | |
*/ | |
""" | |
headTestClass += comment | |
def bodyTest = | |
"""public class ${nameTestClass} extends IntegrationTest { | |
@Inject | |
private ${className} ${className[0].toLowerCase()+className.substring(1)}; | |
@Before | |
public void setup() { | |
//TODO stub: Implement the setup | |
} | |
""" | |
headTestClass += bodyTest | |
headTestClass | |
} | |
def buildTestMethods(String methodName){ | |
if(methodName) | |
"\n @Test\n public void deve${methodName[0].toUpperCase()+methodName.substring(1)}(){\n //FIX: Stub unit test auto generated. Fix when possible.\n assert false;\n }\n" | |
} | |
def createNameTestFile(String completeFileName, String projectName){ | |
completeFileName.toString().replace(projectName+File.separator+'src', projectName+File.separator+'integration-tests').replace('.java', 'Test.java') | |
} | |
def createDirectories(String projectName) { | |
new File(projectName).eachFileRecurse(FileType.DIRECTORIES) { new File(it.toString().replace(projectName+File.separator+'src', projectName+File.separator+'integration-tests')).mkdirs()} | |
} | |
generateTest('c:\\temp', 'BSAD-Seguro-web') | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment