简体   繁体   中英

How to run all modified JUnit test classes?

I have an IntelliJ project, versioned in git.

How can I run all JUnit test classes, that I have modified since my last commit?

There is Changed Files predefined scope in Project tool window you can use to view all vcs changed files. From there select all JUnit classes and from the context menu create JUnit Run/Debug Configuration which will fill the classes pattern to run automatically.

I do not believe there is any 'out of the box' solution to this that you can use. However you could script this in a language of your choice, to find the 'files changed in last commit' you can execute

git diff --name-only HEAD~

HEAD~ is a reference to the 'penultimate' commit, specifying only one commit reference to the git diff command will automatically compare to HEAD which is the latest commit.

You could take the output of this and iterate over it, perhaps if your test classes follow a similar naming scheme to your classes to test execute the tests by specifying a pattern for each file?

If your stack is composed of GIT and maven We came up with this shell script that is appended at the end of ours Jenkins Compilation jobs :

for s in `git diff --name-only HEAD~`
do
if [[ $s == *".java" ]]; then
  s=$(echo $s | tr '/' '.')
  s=$(echo ${s%.java})
  s=${s/.java/}
  s=${s/src./}Test
  echo "will test : $s"
  mvn -Dtest=$s  -DfailIfNoTests=false -Dfile.encoding=UTF-8 test-compile surefire:test
fi
done

Explanations :

Get the last commited files
for each
 if it is a java file
   convert name (in unix format) to FQN Test class name without extension
   run the maven test target

note : ours filenames for test follow the convention of appending Test at the end of the class file name. Adapt to your own conventions

This library seems to provide similar functionality: https://github.com/rpau/junit4git

This is a JUnit extension that ignores those tests that are not related with your last changes in your Git repository.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM