Skip to content

Instantly share code, notes, and snippets.

@jonatasemidio
Last active August 29, 2015 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonatasemidio/14660736404a382c2069 to your computer and use it in GitHub Desktop.
Save jonatasemidio/14660736404a382c2069 to your computer and use it in GitHub Desktop.
TestGenerator
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